【问题标题】:htaccess - redirect entire domain to specific url on new domainhtaccess - 将整个域重定向到新域上的特定 url
【发布时间】:2021-09-07 23:16:55
【问题描述】:

我设置了许多 htaccess 规则来将大量旧域重定向到一个新域。每个旧域都指向新网站上的特定页面。例如:

olddomainlocation1.com 重定向到newdomain.com/location1

olddomainlocation2.com 重定向到newdomain.com/location2 等等

如果您访问一个在 url 中没有任何路径的旧域名,重写规则会按预期重定向,但是当我访问一个在 url 中有路径的旧域时,它不起作用。

例如。 olddomainlocation1.com/index.html,我的重写规则不起作用,我只是在newdomain.com/index.html(不存在)上结束

这是我的 htaccess 规则的示例。有什么想法我哪里出错了吗?

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{http_host} ^www.olddomainlocation1.co.uk [NC,OR]
  RewriteCond %{http_host} ^olddomainlocation1.co.uk [NC]
  RewriteRule ^(.*)$ https://newdomain.co.uk/location1/ [R,NC,L]
</IfModule>

更新

我现在更新了规则,似乎更接近于工作,但还没有完全到位。

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.olddomainlocation1.co.uk$ [NC,OR]
  RewriteCond %{HTTP_HOST} ^olddomainlocation1.co.uk$ [NC]
  RewriteRule ^ https://newdomain.co.uk/location1/ [R,NC,L]
</IfModule>

在我的 RewriteCond 末尾添加 $ 可确保规则在 /index.html 等页面上运行。

当我在 https://technicalseo.com/tools/htaccess/ 上测试此规则时,它告诉我重定向应该到位,但是当我测试重定向时,我的浏览器中的 url 并没有改变。

更新 2

进一步更新:我在域重定向上方确实有 WordPress 特定规则,这可能会导致问题,代码如下:

# BEGIN WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^newdomain.co.uk$
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
# END WordPress

【问题讨论】:

  • “我刚结束newdomain.com/index.html” - 您发布的规则并没有这样做。因此,这里似乎发生了“其他事情”。你有其他指令吗?它可能是缓存的重定向吗?请确认您在重定向中看到的 3xx HTTP 状态。您有权访问服务器配置吗?所有这些(旧的和新的)域都指向哪里?是不是都指向这个地方,和newdomain.com一样?
  • 关于您的更新...这与您的原始规则确实没有什么不同。将$ 添加到RewriteCond 的末尾没有任何区别(实际上它现在不适用于FQDN)。在上面强调我的观点......这里还有“其他事情”。如果您看到重定向到newdomain.com/index.html,那么您有另一个规则或一些服务器端脚本正在执行此操作。您需要找到执行您看到的重定向的代码,因为您发布的规则不可能导致您看到的重定向。
  • 感谢您的帮助!我在这些重定向上方确实有一些 WordPress 特定代码,这可能是冲突的?我已经在更新中发布了代码

标签: wordpress .htaccess redirect mod-rewrite


【解决方案1】:

进一步更新:我在域重定向上方确实有 WordPress 特定规则,这可能会导致问题

是的,这当然是问题所在。 WordPress 特定规则(即 WordPress 前端控制器)应稍后出现在文件中。外部重定向需要靠近.htaccess 文件的顶部, WordPress 前端控制器之前。订单很重要。

问题是/index.html(不存在)形式的请求被重写到 WordPress 引擎之前您的重定向(稍后出现)能够处理该请求。所以这最终会触发 WordPress 生成的 404 而不是重定向。

例如:

# Redirect olddomain to page on newdomain
RewriteCond %{HTTP_HOST} ^(www\.)?olddomainlocation1\.co\.uk [NC]
RewriteRule ^ https://newdomain.co.uk/location1/ [R=302,L]

# BEGIN WordPress
# :

除此之外:我已将您的 2 个条件组合成一个 RewriteCond 指令。

您不需要 &lt;IfModule&gt; 包装器,也不需要重复 RewriteEngine 指令。

【讨论】:

  • 谢谢@MrWhite,这真是一种享受。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2021-06-07
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多