首页 > 解决方案 > .htaccess 重定向不适用于查询字符串

问题描述

我正在尝试将 olddomain.com 及其所有子页面(并且那些可以在 URL 中包含查询字符串)重定向到新域上的特定页面:

newdomain.com/target-page/

目前我在 olddomain.com 的 .htaccess 中使用此代码:

RewriteEngine On
rewritecond %{http_host} ^olddomain.com
rewriteRule ^(.*) https://www.newdomain.com/target-page/ [R=301,L]
ErrorDocument 404 https://www.newdomain.com/target-page/

除了 URL 中有查询字符串的某些情况外,它工作正常。

例如:

http://www.olddomain.com/home.php?pd=index

重定向到:

https://www.newdomain.com/target-page/?pd=index

我需要它只是:

https://www.newdomain.com/target-page/

有趣的是,这样的页面:

http://www.olddomain.com/?page_id=503

重定向到:

https://www.newdomain.com/target-page/

如何确保 olddomain.com 上的所有内容都重定向到 newdomain.com/target-page/,包括查询字符串等?

谢谢!

标签: apache.htaccessredirect

解决方案


您可以使用带有查询字符串匹配条件的重写规则,例如:这会将所有请求从 www.olddomain.com 重定向到 newdomain.com

RewriteCond %{HTTP_HOST} !^alt\.olddomian\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*) http://newdomain.com/$1 [L,R,NE]

代码取自官方mod_rewrite 手册

更新:这会将您的特定 URL 重定向到另一个域:

RewriteCond %{HTTP_HOST} =olddomain.com [NC]
RewriteCond %{QUERY_STRING} ^(p=1&preview=true)
RewriteRule ^$ http://newdomaincom/?%1 [R=301,L]

推荐阅读