使用 mod_rewrite RewriteRule 重写所有查询以不需要 .php 扩展名
Posted
技术标签:
【中文标题】使用 mod_rewrite RewriteRule 重写所有查询以不需要 .php 扩展名【英文标题】:Rewrite all queries to not need the .php extension using a mod_rewrite RewriteRule 【发布时间】:2010-09-16 02:00:05 【问题描述】:我想要所有类似的查询
http://mysite.com/something/otherthing?foo=bar&x=y
改写为
http://mysite.com/something/otherthing.php?foo=bar&x=y
换句话说,只需将 .php 扩展名设为可选,通用。
【问题讨论】:
【参考方案1】:我会这样做。基本上,如果文件不存在,请尝试将 .php 添加到其中。
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)$ $1.php [QSA,L]
【讨论】:
这就是我现在正在做的事情。完美的。谢谢! 所以这表示如果访问的资源不是文件或目录,它将执行RewriteRule?【参考方案2】:只匹配没有扩展名的路径:
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
编辑:在我的测试中,查询字符串会自动传递。如果没有,您可以改用它:
RewriteCond %QUERY_STRING ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
【讨论】:
[QSA, L]
传递查询字符串(L
表示在此之后不处理规则)。【参考方案3】:
这行得通:
RewriteCond %QUERY_STRING ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]
这个想法是确保有一个查询字符串(问号加东西),如果有,检查问号之前的东西是否没有扩展名,如果有,附加 .php。
【讨论】:
【参考方案4】:如果你可以更改httpd.conf和什么,你也可以把:
ForceType application/x-httpd-php
在文件中,因为它将强制所有调用的路径都是 PHP 文件。我认为这也适用于查询字符串。
【讨论】:
【参考方案5】:类似...
RewriteRule /something/(.+)?(.+) /something/$1.php?$2
可能会起作用。
【讨论】:
你可能需要用反斜杠转义问号 我试过了。我认为查询字符串的内容不属于 RewriteRule 中匹配的内容。您必须对查询字符串执行单独的 RewriteCond。看我的回答。以上是关于使用 mod_rewrite RewriteRule 重写所有查询以不需要 .php 扩展名的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mod_rewrite 伪造路径?基本上如何使用 mod_rewrite 在特定的 url 路径上提供平面文件?
如果 .htaccess 使用 mod_rewrite,则 Apache httpd.conf mod_rewrite 取消