Применить.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]