Apache 虚拟主机非 www 不工作

Apache Virtual Hosts Non-www not working

我正在我的 CentOS 7 机器上设置一个虚拟主机文件,但我无法正确解析我的域。

这是我当前的 /etc/httpd/conf.d/vhost.conf 文件的样子

NameVirtualHost *:80

<VirtualHost *:80>
   ServerAdmin webmaster@domain.com
   ServerName www.domain.com
   ServerAlias domain.com
   DocumentRoot /var/www/html/domain.com/public_html/
   ErrorLog /var/log/httpd/error.log
   CustomLog /var/log/httpd/access.log combined

   RewriteEngine on
   RewriteCond %{SERVER_NAME} =www.domain.com [OR]
   RewriteCond %{SERVER_NAME} =domain.com
   RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

似乎发生了正确的重定向。例如:

domain.com 重定向到 https://www.domain.com www 工作正常

但是

https://domain.com 不起作用 http://domain.com 不工作

事实上,如果我删除我设置的重定向,domain.com 根本不起作用,所以看起来 ServerAlias 坏了?

我想知道我是否需要另一个重定向或者我是否缺少其他步骤?

另外,请不要介意http和域名之间的空格。 Whosebug 让我以这种方式格式化它。

如前所述,对任何 https 的请求都不会奏效。正常情况下,您在端口 80 上只有一个 VirtualHost。您确实有一个针对该端口的 Listen 指令,对吗?

为了您的重定向。它说:如果你要求 http://www.example.comhttp://example.com,则重定向到 https://<WHAT THE USER ASKED FOR>。从本质上讲,您是在强迫您的用户一直使用 https,这没问题。但是您在端口 443 上没有 VirtualHost,因此没有响应。

所以:

Listen *:80
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com

    ErrorLog  /var/log/httpd/80_error.log
    CustomLog /var/log/httpd/80_access.log combined

    RewriteEngine on
    RewriteRule ^(.*)$ https://%{HTTP_HOST} [R=301,L]
</VirtualHost>

Listen *:443
<VirtualHost *:443>
    ServerName www.example.com
    # in case users do directly to https
    ServerAlias example.com    

    DocumentRoot /var/www/html/domain.com/public_html/
    DocumentIndex index.html

    ErrorLog  /var/log/httpd/443_error.log
    CustomLog /var/log/httpd/443_access.log combined

    # SSL CONFIGURATIONS, TODO!
</VirtualHost>
  • 在您的 *:443 VH 中,您必须配置证书和 SSL。
  • 您的证书必须在 www.example.com 和 example.com 期间有效,以避免浏览器投诉。
  • 注意 conf.d 下可能有一个 ssl.conf 包含的文件定义了其中的一些内容。确保只设置一次以避免混淆。
  • 无需在*:80 VH 中定义DocumentRoot,因为它只重定向,不响应客户端内容。

玩得开心!

我解决了这个问题。我将我的本地主机文件配置为指向一个旧的、过时的 IP 地址……

domain.com *bad ip address*

我好尴尬。我一定是几个月前设置的,然后忘记了。