我创建了 SSL 证书,myDomain.com
因此我/etc/apache2/sites-enabled
在Ubuntu
example.com-le-ssl.conf example.com.conf example.conf
我的example.com.conf
样子
<VirtualHost *:80>
ServerAdmin admin@example
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
JKMount /* ajp13_worker
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
现在,如果我输入,http://www.example.com
它会被重定向到https://www.example.com
但如果有人找到我的服务器 IP 地址并输入http://<myIpAddress>
内容,则将被视为非 https
所以我添加了这个除了上述 virtualHost 块之外
<VirtualHost myIpAddr:80>
ServerAdmin admin@example
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
JKMount /* ajp13_worker
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =myIpAddr [OR]
RewriteCond %{SERVER_NAME} =myIpAddr:80
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
答案1
这是因为您的 SSL 证书包含您的主机名(example.com 和 www.example.com),但不包含您的 IP 地址。也不应该包含 - 普通客户端只会使用您的实际域名,而不是服务器的 IP 地址。
根据您显示的配置,您的重定向应该转到主机名而不是 IP 地址,仅根据您的配置无法找出出错的原因。但我不太明白您为什么认为需要为您的 IP 地址设置单独的虚拟主机,或者为什么需要在 Host 标头上进行 RewriteCond 匹配。
我应该从你的文件中删除 RewriteCond 行并只保留 RewriteRule 行。
还要检查您获得的第三个文件 - 通常不应该同时存在example.com.conf
和example.conf
。该文件中可能有一些内容在使用 IP 地址进行配置之前被读取。