.htaccess
Код: Выделить всё
RewriteEngine On
# removes .php and adds a trailing /
# i.e. to externally redirect /path/file.php to /path/file/
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1/ [R=307,NE,L]
# adds a trailing slash to non files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=307,NE]
# internally rewrites /path/file/ to /path/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/$ $1.php [L]
Код: Выделить всё
https://example.com/test.php
https://example.com/test
https://example.com/test/
Код: Выделить всё
https://example.com/test/
Код: Выделить всё
https://example.com/test.php?lang=en&id=3
Код: Выделить всё
https://example.com/test/?lang=en&id=3
test.php
Код: Выделить всё
Изменить: учитывая сложность проблемы, косая черта в конце необязательна, но я хотел бы удалить расширение PHP и иметь возможность захватить строку запроса.
Подробнее здесь: https://stackoverflow.com/questions/784 ... and-append
Мобильная версия