.htaccess从foo.com/sub重定向到bar.com/sub

时间:2017-06-27 10:08:03

标签: apache .htaccess redirect server

我想htaccess-将所有访问者从域的子文件夹重定向到另一个域中的同一子文件夹。这应该适用于所有子文件夹和文件 - 但仅适用于文件夹"文件夹"

例如:

  

foo.com/folder - > bar.com/folder

和子结构

  

foo.com/folder/subfolder/file.php - > bar.com/folder/subfolder/file.php

我发现的所有帖子只涉及(子)文件夹,而不是域名。

谢谢!

更新:感谢贡献者 - 当然我试图搜索,但Drupal阻止了重定向,所以我没有想到我找到的答案。不管怎样,谢谢你的正确答案!

1 个答案:

答案 0 :(得分:1)

这应该大致是你要找的东西:

RewriteEngine on
RewriteRule ^/?(.*)$ https://example.com/$1 [END,QSA]

该规则同样适用于http服务器主机配置和动态配置文件(" .htaccess")。

如果您收到"内部服务器错误(http状态500)"有这个机会是你操作一个非常旧版本的apache http服务器。在这种情况下,将在http服务器错误日志文件中找到此提示。在这种情况下,您需要将[END]标志替换为[L]标志。

如果您在单个http服务器上将两个域作为虚拟主机运行,则需要注意不要创建无限的重写循环。在这种情况下,添加一个条件来防止这样的循环:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^/?(.*)$ https://example.com/$1 [END,QSA]

一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。

更新:

在下面的评论中,您提到您只想将此重定向应用于请求路径中的特定子文件夹。要做到这一点,你只需修改匹配模式:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^/?folder/(.*)$ https://example.com/folder/$1 [END,QSA]

另一种选择是:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^/?(folder/.*)$ https://example.com/$1 [END,QSA]