Mod rewrite 将一个文件重定向到另一个域上的文件

Mod rewrite redirect one file to a file on another domain

我已经处理了好几个小时了,但无法正常工作。我在这个 .htaccess 文件中还有其他有效的重定向。

我需要重定向如下。

mydomain.com/dir/subdir/myfile.phpmyotherdomain.com/dir/my_index.php

注意mydomain.commyotherdomain.com都指向同一个根目录。

这是我的代码。

RewriteCond %{HTTP_HOST} ^(www.)?postle.com$
RewriteCond %{REQUEST_URI} !^/pi_www/hardface/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pi_www/hardface/
RewriteCond %{HTTP_HOST} ^(www.)?hardfacetechnologies.com$
RewriteRule ^(/)?$ postle_hft/index_hft.php [L]

我已经厌倦了我能想到的所有排列,但没有任何效果。非常感谢您的帮助。

在文档根目录的 .htaccess 文件中,尝试:

RewriteCond %{HTTP_HOST} =mydomain.com
RewriteRule ^dir/subdir/myfile\.php$ http://myotherdomain.com/dir/my_index.php [R=302,L]

指令的顺序很重要。这应该在您的规范 www 重定向之后,但在任何 内部重写 之前,以及在任何可能冲突的重定向之前。

这还假设您的规范 URL 是裸域(即不是 www 子域)——就像您问题中的示例一样。要匹配裸域 www 子域(并使其不区分大小写),然后将 RewriteCond 指令更改为:

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com$ [NC]

当您确定它工作正常时,将临时 (302) 重定向更改为永久 (301)。 (301重定向被浏览器缓存,测试起来很麻烦。)

您可以在/dir/subdir/.htaccess中使用此规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteRule ^myfile\.php$ http://myotherdomain.com/dir/my_index.php [R=302,NC,L]

如果您想避免外部重定向,那么:

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteRule ^myfile\.php$ /dir/my_index.php [NC,L]

应该也可以工作,因为两个域都指向同一个站点根目录。