重定向 301 或 RedirectMatch 301 对我不起作用

重定向 301 或 RedirectMatch 301 对我不起作用

这是我的情况:

我有 1 个静态 IP 和 2 个服务器。1 个服务器是 Web 服务器,另一个是邮件服务器。我有一个路由器作为硬件防火墙,其中设置了所有需要直通内部 IP 地址的端口。

如果用户输入网址http://www.domain.com他们看到了该网站。如果用户想要访问网络邮件,他们会输入网址http://mail.domain.com但仍然看到http://www.domain.com

我已将 Webmail 域设置为可通过邮件服务器上的端口 8080 访问,如果用户输入 URLhttp://mail.domain.com:8080它工作正常,但没有http://mail.domain.com

这是我的问题:

在我的 httpd.conf 中,我想设置一个重定向 301,以便当用户输入http://mail.domain.com他们被重定向到http://mail.domain.com:8080

我不想使用 .htaccess 并将指令保留在 httpd.conf 中

谢谢...

答案1

您需要在主 Web 服务器上创建一个虚拟主机,以响应“mail.domain.com”地址的 Web 请求。请查看基于名称的虚拟主机Apache 网站上的文档。您还需要一个 mod_rewrite 规则来执行重定向。您的配置将如下所示:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName mail.domain.com
  RewriteEngine On
  RewriteRule (.*) http://mail.domain.com:8080/\1 [R=301,L]
</VirtualHost>

答案2

至少有两种方法可以做到这一点:

  1. 创建 2虚拟主机一个用于 www.domain.com,一个用于 mail.domain.com,然后将 RedirectMatch 指令放在第二个中。
    您也可以使用代理通行证mail.domain.com 虚拟主机中的指令使其像反向代理一样工作,并让 mail.domaine.com:80 直接工作而无需重定向

  2. 使用像这样的 mod_rewrite 仅重定向 mail.domain.com url 并遵循这样的规则

    RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
    RewriteRule ^(.*)http://mail.domain.com:8080/1美元[R=301]

    使用 mod_rewrite 你也可以使用类似规则进行反向代理(mail.domain.com 应该解析为内部 IP)

    RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
    RewriteRule ^(.*)http://mail.domain.com:8080/1美元[P]

相关内容