在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败

Posted

技术标签:

【中文标题】在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败【英文标题】:htaccess rewrite rule with escaped ampersand in $_GET fails 【发布时间】:2012-01-18 00:43:23 【问题描述】:

我在使用 get 参数和 htaccess 重写规则时遇到了问题。 下面是 urlencode() 的链接;我用来重定向到 index.php 的重写规则,最后是 index.php 上的 print_r($_GET)。 如您所见,转义符不是静态变量值的一部分,而是与我的预期相反,它被解释为变量分隔符。 为什么?

初始链接:

<a href="static/Game-Tech-%26-Arts-Lab">link</a>

.htaccess:

RewriteRule ^static/(.*)$ /index.php?static=$1 [L]

index.php:

Array ( [static] => Game-Tech- [-Arts-Lab] => )

【问题讨论】:

$_SERVER["QUERY_STRING"] 是如何查找该请求的?当您手动调用index.php?static=... 时不会发生重写吗? 手动浏览到 "index.php?static=Game-Tech-%26-Arts-Lab" 显示页面很好 - $_SERVER["QUERY_STRING"] 读取 "[QUERY_STRING] => static=Game-Tech-&-Arts-Lab" 【参考方案1】:

啊,好吧。有趣的。似乎有一种特殊的解决方案可以使该&符号特别逃脱。使用[B] flag for Rewriterules。

RewriteRule ^static/(.*)$ /index.php?static=$1 [L,B]

这应该在插入 $1 占位符时对特殊字符进行 urlencode。但我相信它只适用于 Apache 2.2。

找到了一些参考资料:

http://www.dracos.co.uk/code/apache-rewrite-problem/ mod_rewrite with question marks and ampersands (with PHP) http://www.mediawiki.org/wiki/Manual:Short_URL/Ampersand_solution

【讨论】:

哦,这是新闻!那只是解决了它。我将不得不更多地学习那些重写标志 - 谢谢你的帮助 mario! 也不知道那个。这是新的。

以上是关于在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败的主要内容,如果未能解决你的问题,请参考以下文章

C#中怎么把&符号写入XML,不是转义&这种形式的,只插入一个&符号?

XML中不能识别&符号, 需要转义吗?

xml转义字符 &lt;等符号出现的原因

html转义特殊字符代码大全

html中美元符号$转义字符是 &#36;

url地址中 "&" "/"等符号的转义处理