我的 mod 重写规则神秘地从我的查询字符串中截断了句点。
例如这是请求url:
http://mysite/tag/2/Search+For+Articles...
这是我想要的查询字符串:
tag=2&clear=Search+For+Articles...
但这就是我得到的
tag=2&clear=Search+For+Articles
这是我的 mod_rewrite 配置
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^tag/([^/]*)/([^/]*)(/?)$ f.php?tag=$1&clear=$2 [L,QSA]
我该如何解决这个问题?
答案1
我认为问题可能出在您的 Apache 配置本身上...我f.php
在我的一台 Apache2 服务器上创建了一个简单的脚本,它仅由以下内容组成:
<pre>
<?php
print_r($_SERVER);
?>
</pre>
然后,我创建了.htaccess
包含您在问题中指定的确切内容的文件。现在,当我点击时,http://my.server.com/tag/2/Search+For+Articles...
我得到了 404 错误。但是,如果我按预期调用它,http://my.server.com/f.php?tag=2&clear=Search+For+Articles...
我就会得到我预期的输出。然后,我返回到我的 Apache 配置,发现我所工作的路径的目录列表有,AllowOverride None
所以我将其更改为AllowOverride All
并尝试了/tag/...
前缀 URI,结果我收到了以下输出:
Array
(
[REDIRECT_STATUS] => 200
[HTTP_HOST] => my.server.com
[PATH] => /usr/local/bin:/usr/bin:/bin
[DOCUMENT_ROOT] => /var/www
[SERVER_ADMIN] => webmaster@localhost
[SCRIPT_FILENAME] => /var/www/f.php
[REMOTE_PORT] => 35393
[REDIRECT_QUERY_STRING] => tag=2&clear=Search+For+Articles...
[REDIRECT_URL] => /tag/2/Search+For+Articles...
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => tag=2&clear=Search+For+Articles...
[REQUEST_URI] => /tag/2/Search+For+Articles...
[SCRIPT_NAME] => /f.php
[PHP_SELF] => /f.php
[REQUEST_TIME] => 1313889895
)
我已经清理了一些特定于我的服务器的变量,但正如您所见,QUERY_STRING 符合预期。