Непрерывный перенаправление URL-адресов

Я проверил код ниже на нескольких доменах, размещенных на Dreamhost, и он работает, за исключением новых доменов, которые я добавил за последний год.

RewriteEngine on

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.*)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.*)\.php$ $1 [R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

пример, который работает:

ryanvanetten.com/resources/lame/ и ryanvanetten.com/resources/lame.php как перенаправить ryanvanetten.com/resources/lame  и фактический файл, который подан, - lame.php

сломанный пример:

airve.com/test/file правильно обслуживает файл .php, но перенаправляет airve.com/test/file/ и airve.com/test/file.php не работают. Попробуйте их, и вы увидите, что они, похоже, выплевывают внутренний абсолютный путь. То же самое произошло, когда я пробовал каждую переадресацию самостоятельно и когда я попробовал базовую переадресацию ниже.

Redirect 301 /test/file/ /test/file

В .htaccess нет ничего другого. Любая идея о том, в чем проблема?

Ответы

Ответ 1

В обоих случаях вы перенаправляетесь на $1, и у вас нет директивы RewriteBase, чтобы сообщать Apache, где корневать такой относительный путь.

Попробуйте добавить корневую косую черту перед $1, чтобы привязать ее к корню вашего веб-сервера, например:

RewriteRule ^(.*)$ /$1.php [L]