使用 Apache 的重写规则将带有两个查询字符串参数的 URL 重定向到具有更改路径的新域
Redirect a URL with two query string parameters to a new domain with a changed path using Apache's rewrite rules
我正在尝试执行以下操作:
变换URL:https://example.com/human/?system=jitsi&action=SYSTEM
至: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/
不匹配。
- 您的条件和规则都没有用于“开头为”(
^
) 或“结尾为”($
) 的正则表达式标记,这意味着它们匹配子字符串而不是完整字符串。
- 您的规则以斜杠开头,这意味着它不能在
.htaccess
中使用,只能在 Apache 的 conf 文件中使用。我建议使用可选的斜杠 /?
开始规则,以便它们可以在任一上下文中使用。
- 您的查询字符串条件仅匹配您所说的重定向需要存在的两个参数之一。
(.+)
在您的查询字符串条件中可以匹配太多。它将包括由与号 (&
) 分隔的其他参数。这应该更改为 ([^&]+)
意思是“至少一个不包括符号的字符”
- 您的目标 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]
我正在尝试执行以下操作:
变换URL:https://example.com/human/?system=jitsi&action=SYSTEM
至: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/
不匹配。 - 您的条件和规则都没有用于“开头为”(
^
) 或“结尾为”($
) 的正则表达式标记,这意味着它们匹配子字符串而不是完整字符串。 - 您的规则以斜杠开头,这意味着它不能在
.htaccess
中使用,只能在 Apache 的 conf 文件中使用。我建议使用可选的斜杠/?
开始规则,以便它们可以在任一上下文中使用。 - 您的查询字符串条件仅匹配您所说的重定向需要存在的两个参数之一。
(.+)
在您的查询字符串条件中可以匹配太多。它将包括由与号 (&
) 分隔的其他参数。这应该更改为([^&]+)
意思是“至少一个不包括符号的字符”- 您的目标 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]