Как скрыть расширение .php в .htaccess
Возможный дубликат:
Удалить расширение .php с .htaccess
Я пытаюсь скрыть расширение .php файла, но по какой-то причине не могу заставить его работать. Моя последняя попытка заключалась в следующем:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>
Я пробовал много разных вариантов кода, который я нашел в Интернете, но все равно не повезло. Файл .htaccess помещается в корневой каталог.
Ответы
Ответ 1
Я использовал это:
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]
# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
см. также: этот вопрос
Ответ 2
Другой вариант использования PHP-скриптов sans extension -
Options +MultiViews
Или даже просто в каталогах .htaccess
:
DefaultType application/x-httpd-php
Последний позволяет иметь все имена файлов без расширения script
, которые рассматриваются как скрипты PHP. В то время как MultiViews заставляет веб-сервер искать альтернативы, когда предоставляется только базовое имя (там, однако, производительность удалась).
Ответ 3
1) Вы уверены, что модуль mod_rewrite включен? Проверьте phpinfo()
2) В приведенном выше правиле предполагается, что URL-адрес начинается с "папки". Это верно? Вы действительно хотели иметь папку в URL? Это будет соответствовать URL-адресу, например:
/folder/thing -> /folder/thing.php
Если вы действительно хотите
/thing -> /folder/thing.php
Вам нужно отбросить папку из выражения соответствия.
Я обычно использую это для маршрутизации запроса на страницу без php (но ваш должен работать, что заставляет меня думать, что mod_rewrite не может быть включен):
RewriteRule ^([^/\.]+)/?$ $1.php [L,QSA]
3) Предполагая, что вы объявляете свои правила в файле .htaccess, разрешает ли ваша установка параметр Options (AllowOverride) переопределять файлы .htaccess? Некоторые общие хосты не делают.
Когда сервер находит файл .htaccess(как указано в AccessFileName), он должен знать, какие директивы, объявленные в этом файл может отменить предыдущую информацию о доступе.