Удалите расширения .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
Я проверил, и он работает нормально.