【发布时间】: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