Удалите расширения .php с .htaccess без нарушения DirectoryIndex

У меня есть следующий переписывающий файл .htaccess, который удаляет расширение .php из файлов, конвертируя, например, so.com/question.php в so.com/question.

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

Однако это также нарушает поведение по умолчанию DirectoryIndex, в котором просто ввод в каталог будет перенаправлен на индексный файл в папке, например. so.com/answer отображает so.com/answer/index.php

Простое сочетание кода с DirectoryIndex index.php не дает результатов.

Может ли кто-нибудь помочь мне объединить эти две функции или переписать код, чтобы исключить файлы index.php, которые достигнут того же результата?

Ответ 1

Я думаю, вам просто нужно проверить, существует ли файл до того, как он будет переписываться, таким образом вы оставите неповрежденным поведение 404 и directoryindex:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

(не проверено)

Ответ 2

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA]

проверить файлы и папку, а также добавить RewriteBase/

Ответ 3

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Я проверил, и он работает нормально.