https到https在https中redirect的问题

我想要以下redirect发生:

http://www.example.org – > https://example.org [working]

https://www.example.org – > https://example.org [不工作]

正如您在使用“https”时可以看到的那样,它不会redirect到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> 

我会这样做(不是一个完整的configuration,只是显示的概念):

 <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,而不是每个域。 http://www.DOMAIN和DOMAIN几乎是一样的&#x3002; 因此,任何来自端口80的请求,都将redirect到端口443上的https。任何来自端口443的请求都将redirect到“自身”,如果需要的话删除www。

通过ServerAlias结合VirtualHost是干净的,简化了你的configuration。

你需要添加证书,日志,…正如我所说,这不是生产准备!