【问题标题】:.htaccess redirect not working for query strings.htaccess 重定向不适用于查询字符串
【发布时间】:2023-03-03 22:22:01
【问题描述】:

我正在尝试将 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/ 包括查询字符串等?

谢谢!

【问题讨论】:

  • 首先你说它当前重定向到/target-page/?pd=index,你需要它只是/target-page/,但在问题的最后你问你如何保持 i> 原始查询字符串 - 现在是哪一个……?
  • 查询字符串被添加为 /target-page/?pd=index,而我不希望这样,并且需要所有内容(无论是否带有查询字符串)都重定向到 /target-page/ .
  • 在重写目标的末尾添加一个问号,这应该禁止应用任何现有的查询字符串。 rewriteRule ^(.*) https://www.newdomain.com/target-page/? [R=301,L]

标签: apache .htaccess redirect


【解决方案1】:

您可以使用带有查询字符串匹配条件的重写规则,例如: 这会将所有请求从 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 manual

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

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

【讨论】:

  • 感谢您的回复,但不幸的是它在我的情况下不起作用。查询字符串仍在添加到目标页面 URL。
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多