Применить.htaccess Переадресовать во все подкаталоги на www-версию сайта

0 adamdehaven [2012-10-01 21:47:00]

В моем основном файле .htaccess в корне моего домена у меня есть следующий код:

RewriteEngine on
# If missing 'www'
RewriteCond %{http_host} ^example.com [nc]
# Redirect to 'www' version
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,nc]
# Remove 'index.php' from URL 
RewriteRule ^index.php$ http://www.example.com/ [R=301,nc]

Затем у меня есть отдельный файл .htaccess в каждом каталоге, также удаляя index.php из URL-адреса, как показано здесь в каталоге /products:

RewriteEngine on
RewriteRule ^index.php$ http://www.example.com/products/ [r=301,nc]

Когда я (после очистки кеша), зайдите на example.com я перенаправлен на www.example.com/ как и ожидалось.

Но если я example.com/products в своей адресной строке, страница загружается как example.com/products/ и я НЕ перенаправлен на версию www.example.com/products/. Что я делаю не так? Пожалуйста, помогите... и я могу при необходимости дать более подробное объяснение/примеры.

redirect apache subdomain .htaccess


1 ответ


1 Решение Jon Lin [2012-10-01 22:22:00]

Когда вы включаете механизм перезаписи в htaccess в подкаталоге, он исключает все правила перезаписи, которые могут быть в файлах htaccess в любом из своих родительских каталогов, если вы не используете:

RewriteOptions inherit

директивы в файле htaccess в ваших подкаталогах. Поскольку единственное правило, которое у вас есть в /products имеет только перенаправление для index.php, если запрос не /products/index.php для /products/index.php, никакие правила не будут применяться, поскольку правила в родительском каталоге игнорируются.

Также отмечу, что в Apache 2.2, inherit опция устанавливает правила родительского переписывания после правил, которые находятся в подкаталоге.


РЕДАКТИРОВАТЬ:

Унаследованные правила не работают, потому что база не то же самое. Вам просто нужно добавить перенаправление на www-правила и везде. Поэтому добавьте их в свой файл htaccess в каталог /products/:

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

Кроме того, вы можете сохранить RewriteOptions inherit но измените правило htaccess в корне вашего документа:

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,nc]

чтобы:

RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [R=301,nc]