Как объединить www с правилом перезаписи, отличным от www, с существующим

#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 находится в подкаталоге, то они представляют разные значения.