Использование mod_rewrite для удаления расширения .php из запросов

У меня есть учетная запись на godaddy, и я пытаюсь заставить URL-адреса своего веб-сайта не указывать расширение .php в конце пути, выполняя некоторые сценарии mod_rewrite, но мой сценарий не работает. Вот:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php

Если есть что-то, что я не включил, или какие-то ошибки в этом скрипте, пожалуйста, помогите мне разобраться.

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


person Husso    schedule 27.08.2014    source источник
comment
Какой именно входной URL вы тестируете? Ваш RewriteRule ожидает завершающий /   -  person Michael Berkowski    schedule 28.08.2014
comment
Простой URL-адрес, например foo.com/index.php, станет foo.com/index.   -  person Husso    schedule 28.08.2014
comment
Вот как работает mod_rewrite. Он не будет активно изменять запрос /index.php на /index, если вы не проделаете гораздо больше работы (как в ответе Джастина ниже). Обычно он используется для тихой замены /index на /index.php, как у вас выше.   -  person Michael Berkowski    schedule 28.08.2014


Ответы (1)


Если вы включите опцию MultiViews (согласование содержимого Apache), вы сможете связаться как с /page, так и с /page.php.

Options +MultiViews

Но если вы хотите только /page (и перенаправить /page.php на /page), вы можете сделать это следующим образом.

Options -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/([^/]+)\.php [NC]
RewriteRule . /%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]
person Justin Iurman    schedule 27.08.2014
comment
Я новичок в администрировании серверов и попытался использовать ваш скрипт в своем файле .htaccess. Это не сработало. Может ли быть так, что файл .htaccess размещен не в том каталоге (у меня он в корне сайта)? Кроме того, есть ли хорошие онлайн-ресурсы, в которых рассказывается, как правильно использовать mod_rewrite? - person Husso; 28.08.2014
comment
Извините, я забыл косую черту, которая меняет все. Я протестировал его, и он работает, вы можете попробовать еще раз с моим отредактированным кодом. - person Justin Iurman; 28.08.2014