2012-02-10 5 views
0

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

моего файл .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] 
+0

Вы пробовали удаление правила действия, чтобы увидеть если это проблема? – Tiggerito

+0

Попробуйте очистить кеш браузера. Может быть старый код перенаправления, который все еще кэшируется. – Gerben

ответ

1

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

В DOCROOT или в иерархии можно использовать один .htaccess. Единственный файл DOCROOT .htaccess имеет небольшое преимущество в производительности, так как движок должен только открыть и прочитать в одном файле .htaccess. Я описываю это более подробно в этой статье, More on using Rewrite rules in .htaccess files

Вы не указали 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/дата/index.php

+0

отлично работает, спасибо. –

Смежные вопросы