.htaccess переписать - filename.html в /? c = имя файла - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно, чтобы он работал со всеми HTML-URL-адресами (кроме индекса), я попытался безуспешно использовать .htaccess.

Например ... изменить эту ссылку с http://www.example.com/signup.html на http://www.example.com/?c=signup.

Кроме того, если я вхожу непосредственно в http://www.example.com/?c=signup, он должен отражать http://www.example.com/signup.html.

РЕДАКТИРОВАТЬ Я нашел способ сделать это, за исключением случая, когдаЯ ввожу напрямую в файл .html, в этом случае он не переписывается.

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{QUERY_STRING} ^c=([^&]+) [NC]
RewriteRule ^/?$ %1.html [NC,L,QSA]

1 Ответ

0 голосов
/ 13 ноября 2018
RewriteRule ^/?$ %1.html [NC,L,QSA]

На перенаправление (предположительно, вы имели в виду «перенаправление», а не «перезапись») с signup.html на /?c=signup, тогда вы можете сделать что-то вроде следующего передсуществующее перезапись:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ([^.]+)\.html$ /?c=$1 [R,L]

Условие , которое проверяет переменную окружения REDIRECT_STATUS, предотвращает цикл перенаправления, когда существующая директива перезаписывает в файл .html.

Обратите внимание, что это временное (302) перенаправление.Измените R на R=301, если он предназначен для постоянного использования, но только после того, как подтвердите, что он работает нормально.

Ваши существующие директивы могут быть убраны, в итоге:

Options +FollowSymLinks -MultiViews

RewriteEngine On

# Redirect from signup.html to /?c=signup
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ([^.]+)\.html$ /?c=$1 [R,L]

# Rewrite from /?c=signup to signup.html
RewriteCond %{QUERY_STRING} ^c=([^&]+)
RewriteRule ^/?$ %1.html [QSD,L]

Предположительно, вы хотите отбросить строку запроса c= из переписанной замены ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...