到不需要.php扩展名,我想所有的查询,如重写所有查询使用mod_rewrite的重写规则
http://mysite.com/something/otherthing?foo=bar&x=y
被改写为
http://mysite.com/something/otherthing.php?foo=bar&x=y
换句话说,只是使。 php扩展可选,普遍。
到不需要.php扩展名,我想所有的查询,如重写所有查询使用mod_rewrite的重写规则
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]
喜欢的东西...
RewriteRule /something/(.+)?(.+) /something/$1.php?$2
可能会工作。
这工作:
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]
这样做是为了确保有一个查询字符串(问号加的东西),如果是检查问号之前的东西没有扩展名,如果是这样,追加。 PHP。
如果你可以改变的httpd.conf和什么,你也可以把:
ForceType application/x-httpd-php
在该文件中,因为它会迫使所有的所谓的被PHP文件的路径。我认为这也适用于查询字符串。
只匹配不带扩展名路径:
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
编辑:在我的测试中,查询字符串被自动传递。如果没有,你可以用这个代替:
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
这似乎并不奏效。 – dreeves 2008-10-08 17:41:31
您可能需要用反斜杠来跳过问号 – 2008-10-08 19:52:29
我试过了。我认为查询字符串的东西不是在RewriteRule中匹配的东西的一部分。您必须在查询字符串上执行单独的RewriteCond。看到我的答案。 – dreeves 2008-10-10 02:11:36