使用 Apache 的重写规则将具有两个查询字符串参数的 URL 重定向到路径已更改的新域



我想做以下事情:

转换URL:https://example.com/human/?system=jitsi&action=SYSTEM

to:https://new.example/?action=SYSTEM&system=jitsi

RewriteEngine On
RewriteCond %{REQUEST_METHOD}   GET
RewriteCond "%{QUERY_STRING}" action=(.+) 
RewriteRule / https://new.example/?action=SYSTEM&system=%1?

遗憾的是,我没有得到预期的结果。

您的规则有几个问题:

  • 您没有匹配您试图删除的URL路径中的human/
  • 你的条件和规则都没有"开头"的正则表达式标记。(^)或以&quot结尾的"($),这意味着它们是匹配子字符串而不是完整字符串。
  • 你的规则以斜杠开始,这意味着它不能在.htaccess中使用,只能在Apache的配置文件中使用。我建议以可选的斜杠/?开始规则,以便它们可以在任何上下文中使用。
  • 您的查询字符串条件只匹配您所说的重定向需要存在的两个参数中的一个。
  • 查询字符串条件中的
  • (.+)匹配过多。它将包括由与符号(&)分隔的其他参数。这应该改为([^&]+),意思是"至少一个字符,不包括& &">
  • 你有一个额外的流浪?在你的目标URL的末尾,将被解释为system参数值的一部分。
  • 你没有显式地指定重定向([R])或最后([L])的标志,这是最好的做法。
RewriteEngine On
RewriteCond %{REQUEST_METHOD}   GET
RewriteCond %{QUERY_STRING} ^system=([^&]+)&action=([^&]+)$
RewriteRule ^/?human/$ https://new.example/?action=%2&system=%1 [R,L]

最新更新