mod_rewrite принудительно работает префикс www - PullRequest
0 голосов
/ 10 февраля 2012

Я использую другие условия mod_rewrite в моем файле .htaccess, а также хочу убедиться, что мой домен всегда имеет префикс www (для хранения сеансов и seo). Однако, с моим текущим .htaccess, если я перехожу на example.com, он прекрасно работает, но если я перехожу на example.com/folder, он перенаправляется на www.example.com (пропуская / folder) здесь

мой .htaccess файл

Options +FollowSymLinks  
RewriteEngine on  

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# Rules for: actions
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/?$ ./date/index.php?action=$1 [L,QSA]

1 Ответ

1 голос
/ 10 февраля 2012

Механизм перезаписи является многопроходным. Он циклически выбирает самый низкий файл .htaccess на пути с RewriteEngine On до тех пор, пока не произойдет никаких изменений перезаписи. Таким образом, для этого запроса example.com/folder/xxx - если файл .htaccess существует в DOCROOT/folder, он будет использоваться, а правила перезаписи в DOCROOT/.htaccess будут игнорироваться .

Вы можете использовать один .htaccess в DOCROOT или иерархии. Один файл DOCROOT .htaccess имеет небольшое преимущество в производительности, так как движку нужно только открывать и читать в одном файле .htaccess. Я опишу это более подробно в этой статье, Подробнее об использовании правил перезаписи в файлах .htaccess

Вы не указываете RewriteBase, и поэтому движок может часто терять каталоги, как здесь, в вашем случае. Поэтому я бы использовал следующее в DOCROOT/.htaccess:

Options +FollowSymLinks  
RewriteEngine on  
RewriteBase   /
RewriteCond   %{HTTP_HOST}        =example.com
RewriteRule   ^.*                 http://www.example.com/$0   [R=301,L] 

где DOCROOT - корневой каталог вашего документа Apache.

Мне также любопытно, что вы включили набор символов для шаблона даты. Мне кажется странным, но если оставить это в стороне, лучше записать как

RewriteRule ^([-_!~*'()$\w]+)/?$  date/index.php?action=$1    [L,QSA]

при условии, конечно, что вы хотите активировать DOCROOT / date / index.php

...