Возможный дубликат:
Удалите расширение .php с .htaccess
Я пытаюсь скрыть расширение файла .php, но по какой-то причине не могу заставить его работать. Моя последняя попытка заключалась в следующем:
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php </IfModule>
Я пробовал много разных вариантов кода, который я нашел в Интернете, но все равно не повезло. Файл .htaccess помещается в корневой каталог.
Я использовал это:
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]
см. также: этот вопрос
Другой вариант использования PHP-скриптов без расширения
Options +MultiViews
Или даже просто в каталогах .htaccess
:
DefaultType application/x-httpd-php
Последнее позволяет иметь все имена файлов без script
расширения, которые рассматриваются как скрипты PHP. В то время как MultiViews позволяет веб-серверу искать альтернативы, когда предоставляется только базовое имя (однако это связано с производительностью).
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, позволяет ли ваша установка разрешить переопределения параметров (AllowOverride) в файлах .htaccess? У некоторых общих хостов нет.
Когда сервер находит файл .htaccess (как определено AccessFileName), ему нужно знать, какие директивы, объявленные в этом файле, могут переопределять информацию о более раннем доступе.