Как скрыть расширение .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), он должен знать, какие директивы, объявленные в этом файл может отменить предыдущую информацию о доступе.