Переадресация косой черты URL без расширения - PullRequest
2 голосов
/ 13 июня 2011

Я тестировал приведенный ниже код на нескольких доменах, размещенных на 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 правильно обслуживает file.php, но перенаправления airve.com / test / file / и airve.com / test / file.php не работают.Попробуйте их, и вы увидите, что они, кажется, выплевывают внутренний абсолютный путь.То же самое произошло, когда я попробовал каждое из перенаправлений независимо, и когда я попробовал базовое перенаправление ниже.

Redirect 301 /test/file/ /test/file

В .htaccess больше ничего нет.Есть идеи по поводу проблемы?

1 Ответ

1 голос
/ 23 августа 2012

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

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

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