Apache mod_rewrite: переписать ^ (. *) \. Html $ в $ 1.php и запретить прямой доступ к ^ (. *) \. Php $ - PullRequest
1 голос
/ 31 июля 2010

Мое намерение состоит в том, чтобы переписать URL-адреса, заканчивающиеся на .html, на .php (на самом деле не все из них, но это не должно иметь большого значения в связи с этим вопросом).Я также хотел бы запретить URL-адреса, заканчивающиеся на .php (чтобы пользователь мог получить доступ к каждой странице только с помощью URL-адресов с расширением .html).

Я использую эти правила внутри .htaccess:

RewriteRule ^(.*)\.php$ $1.html [R,L]
RewriteRule ^(.*)\.html$ $1.php [L]

Однако это вызывает петлю перенаправления.Я полагаю, это происходит потому, что переписанный URL .html в .php возвращается обратно в mod_rewrite и вызывает срабатывание первого правила.

Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 31 июля 2010

Я не уверен, какая польза от этого, при условии, что у вас есть только URL-адреса ваших ссылок, указывающие на пути .html, но, кроме того, вы правы, что переписанный URL-адрес возвращается на mod_rewrite , Это всегда происходит при использовании его в контексте для каждого каталога (.htaccess), потому что mod_rewrite должен назначить себя в качестве обработчика запроса для корректной работы на этом этапе цепочки обработки запросов Apache.

Приступая к вашей актуальной проблеме, вы можете решить проблему, подготовив первое правило на основе исходного запроса, отправленного на сервер. Это можно сделать так:

RewriteCond %{THE_REQUEST} ^[A-Z]+\s([^\s]+)\.php\s
RewriteRule .* %1.html [R=301,L]

RewriteRule ^(.*)\.html$ $1.php
...