问题描述
我想创建一个重定向这个的 mod_rewrite 规则:
www.domain.com/original/
为此附加一个锚点:
www.domain.com/new/#something-else
它还应该保留原始 URL 中指定的任何查询字符串(如果存在)。例如:
www.domain.com/original/?key=example
应该重定向到:
www.domain.com/new/?key=example#something-else
我尝试使用以下带有 NE 和 QSA 标志的 mod_rewrite 规则,尽管它保留了锚点和查询字符串,但它们以错误的顺序重写:查询字符串 after 锚点而不是之前.
RewriteRule ^original https://%{HTTP_HOST}/new/$1#something-else [QSA,NE,R=301,L]
如何保留原始查询字符串(如果存在)并将锚点附加到末尾?
谢谢
解决方法
如何保留原始查询字符串(如果存在)并将锚点附加到末尾?
除非您在重定向中修改查询字符串,否则不需要标志 QSA
,因此此处可以省略。
无需在您的规则中使用 https://%{HTTP_HOST}
,因为源域和重定向域相同。
$1
将为空,因为您没有在模式中捕获任何文本。
您可以使用此重定向规则:
# when query string is non-empty
RewriteCond %{QUERY_STRING} .
RewriteRule ^original/?$ /new/?%{QUERY_STRING}#something-else [NC,NE,R=302,L]
# when query string is empty
RewriteRule ^original/?$ /new/#something-else [NC,L]
确认它工作正常后,将 R=302
替换为 R=301
(永久重定向)