所有名称当前都指向同一个 Web 服务器文件夹,这是正确的。也就是说,domain.net、domain.org 等都可以正常工作,而无需重定向到主 .com
如何让访问 .org 和 .net 的浏览器重定向至 domain.com?
这应该是基本的,但我无法找出最好的方法。
答案1
我建议你使用RewriteRule
frommod_rewrite
而不是Redirect
from 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.php
则REQUEST_URI=/web/hello.php
答案2
@意大利面条,
在这种特殊情况下,我所做的是创建一个单独的虚拟主机块
<VirtualHost *>
ServerName domain.net
ServerAlias domain.org
Redirect permanent http://domain.com
</VirtualHost>
希望有所帮助。
伊斯梅尔·卡辛潘