Мне бы хотелось, чтобы все запросы понравились
http://mysite.com/something/otherthing?foo=bar&x=y
переписываться как
http://mysite.com/something/otherthing.php?foo=bar&x=y
Другими словами, просто сделайте расширение .php необязательным, универсальным.
Я бы сделал это так. В принципе, если файл не существует, попробуйте добавить к нему .php.
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ $1.php [QSA,L]
Если вы можете изменить httpd.conf и что хотите, вы также можете поставить:
ForceType application/x-httpd-php
в файле, так как он заставит все пути, называемые файлами PHP. Я думаю, что это также работает с строками запроса.
Это работает:
RewriteCond %{QUERY_STRING} ^.+$ RewriteRule ^/?([^/\.]+)$ /$1.php [L]
Идея состоит в том, чтобы убедиться, что есть строка запроса (вопросительный знак плюс материал), и если да, проверьте, нет ли материала перед вопросительным знаком без расширения, и если да, добавьте .php.
Что-то вроде…
RewriteRule /something/(.+)?(.+) /something/$1.php?$2
вероятно, будет работать.
Совпадает только с путями без расширения:
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
Изменить. В моем тестировании строка запроса передается автоматически. Если это не так, вы можете использовать это вместо:
RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1