【问题标题】:htaccess redirect query string, but encoded ? to &htaccess 重定向查询字符串,但已编码?到 &
【发布时间】:2020-12-19 14:13:49
【问题描述】:

我要重定向

https://www.aaa.com/query?v=abc123_ABC

到: https://bbb.com/?url=https://www.aaa.com/query?v=abc123_ABC

我在 .htaccess 中使用它:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ https://bbb.com/?url=https://www.aaa.com/$1  [L,B,NE,NC,QSA,R=301]
</IfModule>

但是输出是: https://bbb.com/?url=https://www.aaa.com/query&v=abc123_ABC

那个?被转换成&,代码有什么问题? 谢谢。

==== 你可以在这里测试它: https://htaccess.madewithlove.be/

【问题讨论】:

  • 只是想在这里仔细检查一下,您希望整个 url 作为查询字符串传递给新的域 url?请确认一次。
  • @RavinderSingh13 是的。
  • @RavinderSingh13 问题是第一个?,如果没有这个?,它会正常工作。
  • 我已经为这个规则准备好了但问题是https://bbb.com/? 如果我将/? 更改为/ 那么只有它有效,它不会在uri 中使用多个?,我相信不允许,如果你真的需要2次?这里告诉我?
  • 一个有效的 URL 只能有一个 ?。下一个? 应该编码为%3F

标签: apache .htaccess redirect mod-rewrite url-rewriting


【解决方案1】:

以下规则应该有效。

RewriteEngine on

RewriteCond %{THE_REQUEST} /query\?v=.+\s [NC]
RewriteRule ^ https://bbb.com/?url=%{REQUEST_SCHEME}://%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING}  [L,R]

【讨论】:

  • @thodison 欢迎您。更新后的版本应该可以按预期工作。
【解决方案2】:

根据 OP 的要求和显示的示例,您能否尝试以下操作。

RewriteEngine ON
RewriteCond %{THE_REQUEST} \s(/query)\?(v=abc123_ABC)\s [NC]
RewriteRule ^(.*)$ https://bbb.com/?url=https://%{HTTP_HOST}%1?%2 [NE,L]

【讨论】:

  • 不工作。在这里测试:htaccess.madewithlove.be
  • @thodison,当我使用 localhost 进行测试时,根据您显示的示例成功地将其重定向到 Location: http://localhost:80/?url=https://localhost/query?v=abc123_ABC
  • @thodison,我不确定在那个网站上,但在我的本地机器上使用curl 命令对我来说效果很好。
  • 谢谢,我稍后测试一下。
  • @RavinderSingh {THE_REQUEST} 变量与 URL schemeHost 标头不匹配,因此必须从条件模式中删除 http[s]?://www\.aaa\.com/。总之不错的尝试。 ?ed。
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 2012-07-27
  • 2015-11-26
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
相关资源
最近更新 更多