如何仅将oldsite.com重定向到newsite.com,排除/wp-login.php
解决特定URL重定向排除问题
没问题,我来帮你搞定这个重定向的排除需求!你的现有代码会把所有访问oldsite.com(包括www前缀)的请求都重定向到newsite.com,自然也包含了/wp-login.php,这就是导致404的原因。我们只需要在规则里加一个排除条件,让服务器忽略对/wp-login.php的重定向即可。
修改后的.htaccess代码
RewriteEngine On # 排除/wp-login.php的重定向 RewriteCond %{REQUEST_URI} !^/wp-login.php$ [NC] # 匹配oldsite.com和www.oldsite.com RewriteCond %{HTTP_HOST} ^oldsite.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.oldsite.com [NC] # 执行重定向 RewriteRule ^(.*)$ http://newsite.com/$1 [L,R=301,NC]
代码解释
RewriteCond %{REQUEST_URI} !^/wp-login.php$ [NC]:这是关键的排除规则,!表示“不匹配”,^/wp-login.php$精确匹配请求路径为/wp-login.php的情况,NC表示不区分大小写(避免大小写差异导致的问题)。只有当请求路径不是/wp-login.php时,才会继续执行后面的重定向规则。- 后面的两个
RewriteCond保持不变,负责匹配oldsite.com和www.oldsite.com这两个域名。 RewriteRule部分也和原来一致,把匹配到的请求路径重定向到newsite.com对应的路径,L表示这是最后一条规则,R=301表示永久重定向,NC同样是不区分大小写。
注意事项
- 确保这个规则放在
.htaccess文件的最顶部(如果有其他WordPress默认规则的话,要放在那些规则之前),避免被其他规则干扰。 - 测试前记得清空浏览器缓存,因为301永久重定向会被浏览器缓存,可能导致你看不到修改后的效果。
- 如果需要排除更多路径,可以复制第一条
RewriteCond,修改路径即可,比如要排除/wp-admin的话,可以添加RewriteCond %{REQUEST_URI} !^/wp-admin/ [NC]。
内容的提问来源于stack exchange,提问作者joe.dev
相关产品推荐
相关产品推荐

