apache - .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/,包括查询字符串等?
谢谢!
解决方案
您可以使用带有查询字符串匹配条件的重写规则,例如:这会将所有请求从 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]
推荐阅读
- javascript - 如何在反应中呈现一些多变的选择?
- javascript - 将选项保存到 chrome 存储失败
- amazon-web-services - 将 AWS CLI 配置文件用于特定节点程序的上下文
- php - 如何从 Woo Commerce 存档页面 URL 中删除品牌或任何文本?
- web-crawler - Stormcrawler - 当 http.content.limit 为 -1 时,解析器螺栓上的 stackoverflow 错误
- azure-devops - VSTS/Azure Devops Dashboard Widget into image
- reactjs - 尝试使用 axios.get() 检索数据,但 Promise 似乎永远不会返回
- ide - Pycharm 认为我使用的是 python 3.5< 但我使用的是 3.7
- sql-server - SSIS 如何加载具有多行的单个成员。
- javascript - 水平滚动功能的滚动动画