将所有域的所有站点重定向到新域,而不使用尾随查询字符串
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)重定向到新域