^([^\.]+)/?$
Это не будет работать так, как задумано, поскольку регулярное выражение по умолчанию является «жадным», поэтому захваченный шаблон использует косую черту, поскольку он необязательный в конце URL-пути. Другими словами, запрос на /foo/
заканчивается переписыванием на foo/.php
, а не foo.php
, как предполагалось.
Вы должны сделать захваченную группу нежадной, используя +?
вместо +
.
Например:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+?)/?$ $1.php [L]
Кроме того ...
- Флаг
NC
в директиве RewriteRule
был излишним.
- Нет необходимости экранировать буквальную точку в классе символов.
- Вы должны убедиться, что
MultiViews
отключено (чтобы избежать потенциальных конфликтов в будущем, если не будет.)
В сторону: Однако, разрешив и /foo/
, и /foo
разрешить одну и ту же страницу, вы потенциально создаете проблему канонизации / дублирующийся контент. Вы должны решить, какой канонический и перенаправить извне один на другой.