在apache上的虚拟主机指向domain.com,domain.net,domain.org全部转到domain.com

目前所有的名称都指向同一个Web服务器文件夹,这是正确的。 也就是说,domain.net,domain.org等工作,而不redirect到主.com

如何访问.org和.net将浏览器redirect到domain.com?

这应该是基本的,但我无法弄清楚最好的办法。

我build议你使用mod_rewrite RewriteRule ,而不是使用mod_alias Redirect 。 由于国防部重写更通用。

 <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} :ie:主机的基本URL。 有关RewriteCondhttp headers更多http headers请访问: RewriteCond 。 [NC]是一个标志:'nocase | NC'(无例)

这会使testing不区分大小写,在扩展的TestString和CondPattern中都会忽略'AZ'和'az'之间的差异。 该标志仅对TestString和CondPattern之间的比较有效。 它对文件系统和子请求检查没有影响。

你也必须redirect以WWW开头的URL。 这就是为什么^(www\.)在模式中。


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

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

如果URl是: domain.com/web/hello.php那么REQUEST_URI=/web/hello.php


@意大利面,

我在这种情况下做的是创build一个单独的虚拟主机块

 <VirtualHost *> ServerName domain.net ServerAlias domain.org Redirect permanent http://domain.com </VirtualHost> 

希望有所帮助。

Ismael Casimpan