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

发布于 2024-12-21 03:57:28 字数 502 浏览 0 评论 0原文

我遇到了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城花音 2024-12-28 03:57:28

啊,好吧。有趣的。似乎有一个特殊的解决方案可以让&符号专门转义。使用 [B] 标志进行重写规则< /a>.

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

这应该在插入 $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.

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

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:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文