在 apache 中使用裸域,httpd.conf 中的域名上没有“www”

在 apache 中使用裸域,httpd.conf 中的域名上没有“www”

令人难以置信的是,我在网上找不到关于使用裸域(无子域)作为主 URI 的良好教程或简单参考指南。

我正在尝试在 apache 中的 httpd.conf 中配置此操作。由于我对服务器这方面还比较陌生,所以我只能自己尝试解决,我所能做的就是配置一些讨厌的重定向循环和错误 400。

对于更常见的情况有很多注释:

http:// --> https://

裸到-->www.

以及大量的 .htaccess 内容(不感兴趣)

我想要的是http://www.domain.com-->http://域名.com

我发现最有帮助的是:apache 上有多个域名(包括 www-“子域名”)吗?

我最终使用了 ceejayoz 在那篇文章中提到的解决方案,有些人指出它很混乱和复杂,因为它得到了预期的结果,但我想知道将来的最佳实践。

我将非常感激您给我指明正确的方向。

提前致谢。

答案1

如果您已启用mod_rewrite,你可以像这样强制执行:

RewriteCond %{HTTP_HOST} ^www\.domain\.tld$
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L]

或者,使用 定义一个额外的 vhostServerName www.domain.tld并始终重定向到domain.tld,使用 HTML 也可以,如下所示:

<meta http-equiv="refresh" content="0;URL='http://domain.tld/'" />

或者在 apache vhost 配置中使用

Redirect permanent / http://domain.tld

答案2

有很多理由使用www.example.com而不是example.com。但是,两者都是可行的选择。要按您的意愿操作,只需在标准文档中切换域以使用www.域即可。

我的做法是为两个域使用一个虚拟主机。为所需域定义虚拟主机,然后将其他域添加为别名。

以下规范应强制裸域使用规范名称。(重写条件规则根据 apache 重写文档进行了修改,以www.从名称中删除。)

ServerName        example.com
ServerAlias       www.example.com
UseCanonicalName  On

RewriteEngine     On
RewriteCond %{HTTP_HOST}   !^example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://example.com/$1 [L,R]

相关内容