Использование mod_rewrite в .htaccess как в корне сайта, так и в подкаталоге - PullRequest
0 голосов
/ 04 декабря 2008

Моя дилемма:

В .htaccess в корне моего сайта:

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

В .htaccess в подкаталоге / foo

RewriteEngine On
RewriteRule ^page1\.html$ /foo/page2.html [R=301]

Во-первых, я стараюсь, чтобы все запросы включали начало www. Во-вторых, я перенаправляю запросы на page1.html в подкаталог foo на page2.html, также в этом подкаталоге.

В моем браузере пытаюсь зайти:

http://www.example.com/foo/page2.html <== работает, хорошо </p>

http://www.example.com/foo/page1.html <== перенаправляет на <a href="http://www.example.com/foo/page2.html" rel="nofollow noreferrer">http://www.example.com/foo/page2.html, хорошо

http://example.com/foo/page1.html <== перенаправляет на <a href="http://www.example.com/foo/page2.html" rel="nofollow noreferrer">http://www.example.com/foo/page2.html, хорошо

http://example.com/foo/page2.html <== перенаправление не происходит, плохо </strong>

==> Следует перенаправить на: http://**www.**example.com/foo/page2.html

В результате экспериментов может показаться, что правила перенаправления в файле .htaccess в корне веб-сайта вступают в силу только для запросов на страницы в этом подкаталоге ЕСЛИ тот подкаталог не содержит файл .htaccess или выполняет и указывает правило перезаписи, которое вступает в силу для этого конкретного запроса.

Кто-нибудь может увидеть, что я делаю неправильно? Как я могу получить правило перезаписи, которое придерживается www. в случае, если не хватает для стрельбы по http://example.com/foo/page2.html?


Спасибо, хоп, это сработало!

Для записи мне пришлось изменить правило перезаписи в файле в корне сайта на:

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

Что просто отлично. Спасибо!

Ответы [ 2 ]

4 голосов
/ 04 декабря 2008

В foo/.htaccess отсутствует следующая директива:

RewriteOptions inherit

ср. документация

2 голосов
/ 04 декабря 2008

Я не уверен в специфике того, почему правила в /.htaccess не применяются к /foo/.htaccess. Как правило, .htaccess файлы наследуют правила в структуре каталогов, что может привести к разным странностям. однако для вашего конкретного решения вы можете просто поместить все соответствующие правила в родительский файл .htaccess, например:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteRule ^foo/page1\.html$ /foo/page2.html [R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...