我希望发生以下重定向:
http://www.example.org->https://example.org[在职的]
https://www.example.org->https://example.org[不工作]
正如您所看到的,当使用“https”时,它不会重定向到https://example.org但只是停留在https://www.example.org
我的 www.conf(用于 www.example.org):
<VirtualHost *:80>
ServerName www.example.org
Redirect / https://example.org
ServerAdmin webmaster@localhost
DocumentRoot /srv/www
ErrorLog ${APACHE_LOG_DIR}/www_error.log
CustomLog ${APACHE_LOG_DIR}/www_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.org
Redirect / https://example.org
ServerAdmin webmaster@localhost
DocumentRoot /srv/www
ErrorLog ${APACHE_LOG_DIR}/www_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/www_ssl_access.log combined
Include /etc/letsencrypt/certbot.conf
</VirtualHost>
我的main.conf(例如.org):
<VirtualHost *:80>
ServerName example.org
Redirect / https://example.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/main_error.log
CustomLog ${APACHE_LOG_DIR}/main_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName example.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/main_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/main_ssl_access.log combined
Include /etc/letsencrypt/certbot.conf
</VirtualHost>
<Directory /var/www/html>
Options -Indexes
</Directory>
答案1
我会这样做(不是完整的配置,只是展示概念):
<VirtualHost *:80>
ServerName example.org
ServerAlias www.example.org
Redirect Permanent / https://example.org
</VirtualHost>
<VirtualHost *:443>
ServerName example.org
ServerAlias www.example.org
RewriteEngine on
RewriteCond %{HTTP_HOST} !^example.org
RewriteRule (.*) https://example.org$1 [R=301,L]
</VirtualHost>
这里的想法是每个端口一个 VirtualHost,而不是每个域一个 VirtualHost。www.DOMAIN 和 DOMAIN 几乎相同。因此,任何来自端口 80 的请求都会重定向到端口 443 上的 https。任何来自端口 443 的请求都将重定向到“自身”,如果需要,可以删除 www。
通过 ServerAlias 组合 VirtualHost 非常简洁并简化了您的配置。
您需要添加证书、日志......正如我所说,这还没有准备好投入生产!