【问题标题】:Apache Virtual Hosts Non-www not workingApache 虚拟主机非 www 不工作
【发布时间】:2018-06-27 07:49:32
【问题描述】:

我正在我的 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 和域名之间的空格。 StackOverflow 让我这样格式化。

【问题讨论】:

    标签: apache centos centos7 virtual-hosts


    【解决方案1】:

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

    用于您的重定向。它说:如果您要求http://www.example.comhttp://example.com,请重定向到https://&lt;WHAT THE USER ASKED FOR&gt;。本质上,您是在强迫您的用户一直使用 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}$1 [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,因为它只重定向而不向客户端响应内容。

    玩得开心!

    【讨论】:

      【解决方案2】:

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

      domain.com *bad ip address*

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

      【讨论】:

        猜你喜欢
        • 2013-08-29
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        • 2016-01-22
        • 2015-04-10
        相关资源
        最近更新 更多