apache 上的虚拟主机将 domain.com、domain.net、domain.org 全部指向 domain.com

apache 上的虚拟主机将 domain.com、domain.net、domain.org 全部指向 domain.com

所有名称当前都指向同一个 Web 服务器文件夹,这是正确的。也就是说,domain.net、domain.org 等都可以正常工作,而无需重定向到主 .com

如何让访问 .org 和 .net 的浏览器重定向至 domain.com?

这应该是基本的,但我无法找出最好的方法。

答案1

我建议你使用RewriteRulefrommod_rewrite而不是Redirectfrom mod_alias。因为 mod rewrite 更加通用。

<VirtualHost *:80>
     ServerName domain.org
     ServerAlias www.domain.org domain.net www. domain.net
     RewriteEngine on
     RewriteCond %{HTTP_HOST} ^(www\.)?domain\.(net|org)$ [NC]
     RewriteRule ^ http://domain.com%{REQUEST_URI} [L,R=301]
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /path/to/documentroot
    ServerName domain.com
    ServerAlias www.domain.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

确保您已NameVirtualHost *:80 未注释

解释:


     RewriteEngine on

设置RewriteEngine开启


     RewriteCond %{HTTP_HOST} ^(www\.)?domain\.(net|org)$ [NC]

匹配%{HTTP_HOST}:即:主机的基本 URL。有关RewriteCond&的更多信息,http headers请访问:重写条件. [NC]是一个标志:'nocase|NC'(无大小写)

这使得测试不区分大小写 - 扩展的 TestString 和 CondPattern 中的“AZ”和“az”之间的差异将被忽略。此标志仅对 TestString 和 CondPattern 之间的比较有效。它对文件系统和子请求检查没有影响。

您还必须重定向以 WWW 开头的 URL。这就是为什么^(www\.)在模式中。


     RewriteRule ^ http://domain.com%{REQUEST_URI} [L,R=301]

domain.com如果在 Occurrs 中匹配,则将 URL 重写为RewriteCond。如果存在,则添加任何请求 URI。即此请求的 URI(相对于 DOCUMENT_ROOT)。

如果 URl 是:domain.com/web/hello.phpREQUEST_URI=/web/hello.php


答案2

@意大利面条,

在这种特殊情况下,我所做的是创建一个单独的虚拟主机块

<VirtualHost *>
   ServerName domain.net
   ServerAlias domain.org

   Redirect permanent http://domain.com
</VirtualHost>

希望有所帮助。

伊斯梅尔·卡辛潘

相关内容