【问题标题】:How can I replace all '&amp%3B' with '&' in my _GET url via htaccess?如何通过 htaccess 在我的 _GET url 中将所有 '&amp%3B' 替换为 '&'?
【发布时间】:2018-06-28 10:46:52
【问题描述】:

我有一个类似 https://my.com/list.php?login=test&amp%3Bpassword=test&amp%3Btype=m3u 的链接,并试图通过 .htaccess 我的规则将所有 &amp%3B 替换为 &

RewriteCond %{QUERY_STRING} ^(.*)&amp%3B(.*)$
RewriteRule ^(.*)$ /$1?%1&%2 [L,R=301]

不工作。 如何使用 .htaccess 文件将 url 中的所有 amp%3B 更改为 &?

【问题讨论】:

  • 你能在我们可以看到链接的地方添加相关的 HTML 行吗?
  • 请给我一些背景信息。为什么你有这种形式的链接?我只是问,因为最好在早期阶段以编程方式更改它
  • 以编程方式无法更改引用,因为请求是由其他网站发出的。有必要通过 .htaccess 更改使用我的规则,参考更改:/list.php?login=test&amp%253Bpassword=test&type=m3u
  • 我不确定 %{QUERY_STRING} 变量是否仍然包含 %3B - 此时可能已经进行了 URL 解码。所以尝试在那个地方匹配;
  • 或者,如果你不能通过重写来实现它,一个替代方法可能是在你的 PHP 脚本中简单地处理它。如果我的测试工作正常,而不是 passwordtest,这似乎会导致 $_GET 中的两个条目与键 amp;passwordamp;test - 所以你可以很容易地检查这些是否设置,如果是这样使用正确的键“创建”相应的 $_GET 条目(然后可能会在之后取消设置错误的键,如果这些可能会在以后的应用程序/脚本中引起问题。)

标签: php .htaccess mod-rewrite


【解决方案1】:

您忘记了 REQUEST_URI。

另外,因为您正在使用 QUERY_STRING 你不需要 RewriteRule 中的括号

除了确保你在上面有“RewriteEngine On”

这里是

RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)(&|&amp%3B)(.*)
RewriteRule ^.*$ %{REQUEST_URI}?%1&%3 [L,R=301]

它适用于 & 和 &amp%3B。见第二个“()”。

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2011-05-31
    相关资源
    最近更新 更多