2008-10-08 80 views

回答

6

我会这样做。基本上,如果文件不存在,请尝试添加.php。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ $1.php [QSA,L] 
0

喜欢的东西...

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

可能会工作。

+0

这似乎并不奏效。 – dreeves 2008-10-08 17:41:31

+0

您可能需要用反斜杠来跳过问号 – 2008-10-08 19:52:29

+0

我试过了。我认为查询字符串的东西不是在RewriteRule中匹配的东西的一部分。您必须在查询字符串上执行单独的RewriteCond。看到我的答案。 – dreeves 2008-10-10 02:11:36

1

这工作:

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

这样做是为了确保有一个查询字符串(问号加的东西),如果是检查问号之前的东西没有扩展名,如果是这样,追加。 PHP。

1

如果你可以改变的httpd.conf和什么,你也可以把:

ForceType application/x-httpd-php 

在该文件中,因为它会迫使所有的所谓的被PHP文件的路径。我认为这也适用于查询字符串。

0

只匹配不带扩展名路径:

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

编辑:在我的测试中,查询字符串被自动传递。如果没有,你可以用这个代替:

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