#regex #apache #.htaccess #mod-rewrite #rewrite
#регулярное выражение #apache #.htaccess #мод-перезапись #перезапись url
Вопрос:
Я пытаюсь добавить www к правилу перезаписи, отличному от www, к существующему:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(. )$ index.php?url=$1 [QSA,L]
Я пытался:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
#Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www.(. )$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^(. )$ index.php?url=$1 [QSA,L]
Как я могу объединить эти два правила перезаписи?
Ответ №1:
Вы можете использовать:
RewriteEngine On
#Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www.(. )$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(. )$ index.php?url=$1 [QSA,L]
Комментарии:
1. Я понимаю, почему вы переместили его выше -d -f -l. Не могли бы вы, пожалуйста, объяснить разницу между /$ 1 и {REQUEST_URI}, а также почему вы добавили NE. Если это слишком много объясняет, пожалуйста, укажите мне на какое-нибудь хорошее чтение, если вы его знаете.
2.Вы можете проверить, что Руководство Apache
NE
предназначено дляnoescape
и/$1
практически совпадает с%{REQUEST_URI}
но если .htaccess находится в подкаталоге, то они представляют разные значения.