在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败
我遇到了 get 参数与 htaccess 重写规则结合使用的问题。 下面是 urlencode() 的链接;我用来重定向到index.php 的重写规则,最后是index.php 上的print_r($_GET)。 正如您所看到的,经过 url 转义的 & 符号不是变量 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] => )
I am encountering a problem with a get parameter in conjunction with a htaccess rewrite rule.
Below is the urlencode()'ed link; the rewrite rule I use to redirect to index.php, and lastly, a print_r($_GET) on the index.php.
As you can see, the urlescaped ampersand is not part of the value for variable static, but instead and contrary to my expectation gets interpreted as a variable seperator. Why?
Initial link:
<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] => )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
啊,好吧。有趣的。似乎有一个特殊的解决方案可以让&符号专门转义。使用
[B]
标志进行重写规则< /a>.这应该在插入
$1
占位符时对特殊字符进行 urlencode。但我相信它只适用于 Apache 2.2。找到了一些参考资料:
Ah, okay. Interesting. It seems there is a special solution for keeping that ampersand specifically escaped. Use the
[B]
flag for Rewriterules.This is supposed to urlencode special characters when interpolating the
$1
placeholder. It only works with Apache 2.2 however I believe.Found a few references: