【发布时间】:2015-02-06 06:46:57
【问题描述】:
我正在将 mod_rewrite 与 Apache 和 PHP 一起使用来重写页面的 URL。
对于网站上的一页,我使用以下内容,效果很好:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(\d+)/? index.php?id=$1
</IfModule>
但是,对于网站上的另一个页面(我遇到问题的那个),我正在使用以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(\w+)/? index.php?id=$1
</IfModule>
基本上,\d 更改为 \w。
出于某种原因,对于\w 页面,id 参数被设置为index,而不是 URL 中的实际值。
如果我将\w 更改为.,则id 参数等于index.php。
当我查看 PHP $_SERVER 超全局时,REDIRECT_QUERY_STRING 参数设置正确,但 QUERY_STRING 参数设置为 index 或 index.php(取决于我使用的是 \w 还是.)。
这里发生了什么,为什么?
更重要的是,我该如何解决这个问题?
谢谢。
【问题讨论】:
-
你期望它是什么?
\w将匹配任何单词字符,因此它不会捕获.php部分,而.匹配任何字符,因此会完整捕获index.php。 -
\w= "单词字符",基本上是a-zA-Z,.不是其中之一。执行^(\w)将从index.php中捕获index,因为.被明确排除在\w之外。
标签: php apache .htaccess mod-rewrite query-string