Перепишите все запросы, чтобы не нуждаться в расширении .php, используя mod_rewrite RewriteRule - PullRequest
6 голосов
/ 08 октября 2008

Я хотел бы, чтобы все запросы, как

http://mysite.com/something/otherthing?foo=bar&x=y

будет переписано как

http://mysite.com/something/otherthing.php?foo=bar&x=y

Другими словами, просто сделайте расширение .php необязательным, универсальным.

Ответы [ 5 ]

6 голосов
/ 20 декабря 2008

Я бы сделал это так. Обычно, если файл не существует, попробуйте добавить в него .php.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.php [QSA,L]
1 голос
/ 08 октября 2008

Это работает:

RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]

Идея состоит в том, чтобы убедиться, что есть строка запроса (знак вопроса и прочее), и если это так, проверить, не имеет ли расширение перед знаком вопроса расширение, и если да, добавить .php.

1 голос
/ 08 октября 2008

Если вы можете изменить httpd.conf и что на, вы также можете указать:

ForceType application/x-httpd-php

в файле, так как он заставит все пути, называемые PHP-файлами. Я думаю, что это также работает со строками запроса.

0 голосов
/ 10 октября 2008

Соответствует только путям без расширения:

RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php

Редактировать: в моем тестировании строка запроса передается автоматически. Если это не так, вы можете использовать это вместо:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
0 голосов
/ 08 октября 2008

Что-то вроде ...

RewriteRule /something/(.+)?(.+) /something/$1.php?$2

, вероятно, будет работать.

...