如何在 htaccess 中将 domain-1/dir1/dir2/* 重定向/重写为另一个 domain-2/dir1/dir2/*?

如何在 htaccess 中将 domain-1/dir1/dir2/* 重定向/重写为另一个 domain-2/dir1/dir2/*?

我尝试将一个域中一个目录下的所有 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

正则表达式:

https://regex101.com/r/2BD1kB/1

答案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 会被浏览器永久缓存,因此可能会使测试出现问题。

您需要在测试之前清除浏览器缓存。

相关内容