我得到了以下.conf
文件:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/example/public
<Directory /var/www/html/example>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我也在使用 Let's Encrypt SSL。所有请求都example.com
正常工作并重定向到 HTTPS。问题是别名域不起作用。当我请求时www.example.com
出现ERR_NAME_NOT_RESOLVED
错误。有人能给我指出正确的方向吗?
答案1
ERR_NAME_NOT_RESOLVED 是 DNS 解析错误,表明请求甚至没有到达您的服务器。
除了问题中提供的配置外,您还需要在指向您服务器的 DNS 中定义相应的A
记录(CNAME
如果这些是同一个域,则为记录,只是子域不同)www.example.com
。如果没有这个,请求就无法解决。
在旁边:
RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
您的重定向块过于复杂。您不需要 mod_rewrite,只Redirect
需要一个 mod_alias。假设您还想规范化主机名?您不需要检查,SERVER_NAME
因为大概您想重定向到达端口 80 vHost 的任何请求?
例如,以下内容可能就足够了:
Redirect 301 / http://example.com/