.htaccess 从WordPress重定向中排除子目录

uqcuzwp8  于 2022-11-16  发布在  WordPress
关注(0)|答案(2)|浏览(130)

我想将所有访问者重定向到我的WordPress网站,除了/cy/子目录中的页面可用的翻译:

  • /cy/

例如

  • https://myoldomain.co.uk/cy/partners/

未重定向,但

  • https://myoldomain.co.uk/partners/
  • https://myoldomain.co.uk/

被重定向。
我已经尝试了很多,这一个工程在一个在线测试,但不是在实践中-所有的域,包括那些与/cy/重定向。

RewriteBase /
RewriteCond %{HTTP_HOST} myoldomain\.co.uk
RewriteCond %{REQUEST_URI} !^/(cy|cy/.*)$ 
RewriteRule ^(.*)$ https://mynewdomain\.co.uk/$1 [R=301,L]

你知道我错过了什么吗

dauxcl2d

dauxcl2d1#

RewriteCond %{HTTP_HOST} myoldomain\.co.uk
RewriteCond %{REQUEST_URI} !^/(cy|cy/.*)$ 
RewriteRule ^(.*)$ https://mynewdomain\.co.uk/$1 [R=301,L]

如果你使用的是WordPress,那么你在文件后面有一个前端控制器模式,它会把所有非文件重写到index.php(WP前端控制器)。在重写引擎的 * 第二次传递 * 期间,/index.php显然不是/cy...,所以会发生重定向。但这应该在重定向中可见。
您需要确保上述重定向只应用于来自客户端的初始请求,而不是重写的请求。您可以通过检查REDIRECT_STATUS环境变量(在初始请求中为空)来实现这一点。
例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} (^|\.)myoldomain\.co\.uk [NC]
RewriteCond %{REQUEST_URI} !^/(cy|cy/.*)$ 
RewriteRule ^(.*)$ https://mynewdomain.co.uk/$1 [R=301,L]

这需要接近文件的顶部,* 在 * WP前端控制器模式之前。
在测试之前,您需要清除浏览器缓存。最好使用302(临时)重定向进行测试,以避免潜在的缓存问题。

7kjnsjlb

7kjnsjlb2#

这可能不是很好,但似乎排除wp-login.php和wp管理区从重定向.

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} (^|\.)myoldomain\.co\.uk [NC]
RewriteCond %{REQUEST_URI} !^/(cy|cy/.*)$ 
RewriteCond %{REQUEST_URI} !^/(wp-admin|wp-admin/.*)$ 
RewriteCond %{REQUEST_URI} !^/(wp-includes|wp-includes/.*)$ 
RewriteCond %{REQUEST_URI} !^/(wp-content|wp-content/.*)$ 
RewriteCond %{REQUEST_URI} !^/wp-login.php
RewriteRule ^(.*)$ https://mynewdomain.co.uk/$1 [R=301,L]

相关问题