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.com
或 http://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*
我好尴尬。我一定是几个月前设置的,然后忘记了。
我正在我的 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.com
或 http://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*
我好尴尬。我一定是几个月前设置的,然后忘记了。