将所有域的所有站点重定向到新域,而不使用尾随查询字符串

Posted

技术标签:

【中文标题】将所有域的所有站点重定向到新域,而不使用尾随查询字符串【英文标题】:Redirect all sites of all domain to new domain without trailing query string 【发布时间】:2012-12-27 18:39:21 【问题描述】:

我想将旧域上的所有请求重定向到新域的主页(根站点)。我认为它适用于:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]

(请参阅:.htaccess redirect all pages to new domain)但出于一个奇怪的原因,当我尝试访问 URL www.olddomain.com/faq/pdf.php?cat=7&id=93&artlang=de 时,我被重定向到 www。 newdomain.com/?cat=7&id=93&artlang=de。可能是什么问题?

过去我遇到了一些问题,因为这个域位于我的新主域的子目录(作为插件域)中,但在主域的 .htaccess 中我有一个:

RewriteCond %HTTP_HOST ^([^.]+\.)*olddomain\.com
RewriteRule .* - [L]

禁用此类错误。还有其他想法吗?我从几个小时开始就在尝试这个。

编辑:当我发现问题是查询字符串时,我已经用谷歌搜索了。

【问题讨论】:

我在您的重定向 URL 中没有看到任何 $$$,这就是问题所在。 抱歉,我没明白你的意思? 【参考方案1】:

如果你想重定向到你的新域没有路径和查询字符串,你必须附加一个空的查询字符串

RewriteEngine On
RewriteRule .* http://newdomain.com/? [R=301,L]

【讨论】:

这正是我想要的,但它不起作用并且仍然通过查询字符串。我知道这很奇怪,但我无法找到问题的根源。 @Andy 请确认您在目标 URL 处有一个最终的?。我刚刚在我的环境中对此进行了测试,它适用于最终的? 我有一个“/?”在我的网址末尾。但它仍然保留查询。是否有可能是我的链接问题中提到的 apache 错误,或者这与它没有任何关系?我也使用了 Saluman 的变体。 @Andy Salman 的和我的一样。正如我所说,我在虚拟主机 .htaccess 中使用我的 apache 2.2 对此进行了测试,它可以正常工作。您的环境中一定有一些不同的东西,这导致了这种情况。也许,您在目录上下文或主配置或其他东西中使用它。 对不起,这是浏览器缓存的问题。你有正确的解决方案。非常感谢,你解决了我的问题! :)【参考方案2】:

更新:

RewriteEngine On
RewriteCond %HTTP_HOST (?:www\.)?oldomain\.com [NC]
RewriteRule ^(.*)$ http://newdomain.com/?  [R=301,L]

作为示例更新,而不是作为答案。

【讨论】:

谢谢,但我的目标是不传递 URL 的其余部分。我的问题是它会自动通过。 好的。弄反了尝试添加 DPI 标志。像这样 [R=301,L,DPI] 看看会发生什么。 @Salman 非常感谢。我只是复制粘贴问题中的规则,并没有注意到 L 丢失了。 感谢您的帮助,但它仍然保留查询字符串。使用了您的最新建议。 不客气。但是,正如我所说,我想根据您示例中的 2 个 URL 理解您的问题。最后一个缺少 URI 的一部分,我认为这就是问题所在。但是,现在我了解您想要什么,解决方案在 Olaf 和 Salman 的回答中。这就是删除查询字符串的方法。确保在真实服务器中对其进行测试。大多数测试服务器不支持? 删除查询。【参考方案3】:

mod_rewrite 将查询字符串附加到重写的 URL如果没有指定查询字符串。添加一个空的查询字符串来避免问题(添加一个? 就足够了):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/? [R=301,L]

还可以阅读 QSA 标志。

【讨论】:

感谢 QSA 的链接。问号解决了问题。

以上是关于将所有域的所有站点重定向到新域,而不使用尾随查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

htaccess:将所有域(https和http)重定向到新域

.htaccess 将文件夹下的所有页面重定向到新域

如果用户已缓存站点,如何将用户从旧域重定向到新域

.NET:从域和子文件夹重定向到新域,保留路径和查询字符串,在 web.config 中使用 httpredirect

将旧域的每个页面重定向到新域上的相同页面URL

htaccess 将旧域重定向到新域