htaccess重写$_GET中带有转义&号的规则失败


htaccess rewrite rule with escaped ampersand in $_GET fails

我遇到了一个与htaccess重写规则一起使用get参数的问题。下面是urlencode()的链接;我用来重定向到index.php的重写规则,最后是index.php上的print_r($_GET)。正如您所看到的,未转义的&符号不是变量static值的一部分,相反,与我的期望相反,它被解释为变量分隔符。为什么?

初始链接:

<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] => )

啊,好的。有趣。似乎有一个特殊的解决方案来保持与符号的特别转义。在rewritrules中使用[B]标志

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

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

找到一些引用:

  • http://www.dracos.co.uk/code/apache-rewrite-problem/
  • mod_rewrite with问号和& (PHP)
  • http://www.mediawiki.org/wiki/Manual: Short_URL/Ampersand_solution