/file.php в / file / попробовать - PullRequest
       21

/file.php в / file / попробовать

3 голосов
/ 01 января 2012

Я хотел перенаправить / переписать свои файлы name.php в / name /, я нашел решение по другой теме (/5312409/htaccess-perepisat-v-kataloge-skryt-rasshirenie-php-i-prinuditelno-ispolzovat-kosuy-chertu)

Хотя я хотел изучить его сам и начал с нуля. Сначала я использовал этот, например, .com / test / показывает содержимое .com / test.php:

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php

Затем я попробовал следующее, само по себе, который перенаправляет .com / test.php в .com /test /:

 RewriteEngine On
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [R=301]

Итак, оба работают самостоятельно, но когда я объединяю их, я получаю ошибку цикла, даже когда я добавляю [L] к ней, что должно означать, что правила должны быть толькоиспользуется один раз. Так что это не работает:

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php [L]
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [L,R=301]

Возможно, я допустил какую-то глупую ошибку, но мне это кажется логичным ... Надеюсь, кто-то может указать на мою ошибку. Спасибо.

Ответы [ 2 ]

1 голос
/ 01 января 2012

Убрать L-флаг из первого правила. Это остановит «выполнение», и второе правило не будет использовано. Во втором правиле вы должны оставить флаг L, потому что он последний.

1 голос
/ 01 января 2012

Поскольку у вас есть внешнее перенаправление с R=301, добавление L к нему не помогает столько, сколько вам нужно, так как перенаправление вернется на сервер как новый запрос - где он снова совпадает ваше первое правило перезаписи.

Вместо этого вам нужно что-то вроде этого:

RewriteCond %{THE_REQUEST} ^\w+\ /(.*)\.php\ HTTP/
RewriteRule ^ /%1/ [R=301]

RewriteRule ^(.*)/$ $1.php

Обратите внимание, что THE_REQUEST соответствует всей строке исходного запроса, например, GET /index.php HTTP/1.1. Даже когда %{REQUEST_URI} переписывается в .php как часть 2-го правила (где оно будет соответствовать внутреннему подзапросу), %{THE_REQUEST} никогда не переписывается, и это гарантирует, что URL, переписанный в .php, не не совпадают с подзапросом и приводят к другому перенаправлению, возвращаемому клиенту.

...