我尝试将一个域中一个目录下的所有 URL 重定向到同一服务器上另一个域中的同一目录,但无法成功。我该如何解决这个问题?
我努力了:
尝试 1
RewriteBase /
RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301]
第二次尝试
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dir1/dir2(.*)$ https://domain-2.org/$1 [L,R=301]
</IfModule>
期望输出:
我希望重定向所有类似于这些模式的 URL:
www.domain-1.org/dir1/dir2/url-1
www.domain-1.org/dir1/dir2/url-2
www.domain-1.org/dir1/dir2/url-N
https://domain-1.org/dir1/dir2/url-1
https://domain-1.org/dir1/dir2/url-2
https://domain-1.org/dir1/dir2/url-N
http://domain-1.org/dir1/dir2/url-1
http://domain-1.org/dir1/dir2/url-2
http://domain-1.org/dir1/dir2/url-N
https://www.domain-1.org/dir1/dir2/url-1
https://www.domain-1.org/dir1/dir2/url-2
https://www.domain-1.org/dir1/dir2/url-N
http://www.domain-1.org/dir1/dir2/url-1
http://www.domain-1.org/dir1/dir2/url-2
http://www.domain-1.org/dir1/dir2/url-N
到:
https://domain-2.org/dir1/dir2/url-1
https://domain-2.org/dir1/dir2/url-2
https://domain-2.org/dir1/dir2/url-N
正则表达式:
答案1
RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301]
假设你RewriteEngine On
在两种情况下都这样做,那么你的两次“尝试”实际上相同.RewriteBase
此处无关。
反向$1
引用指的是RewriteRule
图案即(.*)
- 一切后 /dir1/dir2
- 因此这不会重定向到另一个域上的“同一目录”。
由于两个域都指向同一个服务器(并且我假设它们在文件系统上位于同一个位置),所以您需要明确检查域(即。主机名) 在您的重定向中。
请尝试以下操作:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain-1\.org [NC]
RewriteRule ^dir1/dir2/.* https://domain-2.org/$0 [R=302,L]
$0
是对匹配的整个 URL 路径的反向引用RewriteRule
图案. 例如. dir1/dir2/url-N
.
请注意,这是一个 302(临时)重定向。使用 302 进行测试,只有确认此方法可行后才更改为 301(永久)重定向。301 会被浏览器永久缓存,因此可能会使测试出现问题。
您需要在测试之前清除浏览器缓存。