Ubuntu 14.04
阿帕奇/2.4.7
我在这里发布了我的虚拟主机和默认 ssl 主机的 conf 文件。无法弄清楚我做错了什么。
http://<website_url>
显示文件夹的索引。我想将其重定向到 https。
https://<website_url>
打开正常。
重要提示:我没有启用默认 SSL 站点。
cat default-ssl.conf|grep -v "#"
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
</IfModule>
以下是 mywebsite 的配置文件:
cat www.mywebsite.com.conf|grep -v "#"
<VirtualHost *:443>
ServerName www.mywebsite.com:443
ServerAlias www.mywebsite.com
ServerAdmin [email protected]
DocumentRoot /var/www/www.mywebsite.com/html
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
SSLEngine on
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
ErrorLog ${APACHE_LOG_DIR}/ssl.error.log
CustomLog ${APACHE_LOG_DIR}/ssl.access.log combined
</VirtualHost>
答案1
如果您希望http://www.mywebsite.com/
始终发送该信息,https
则应使用,redirect
因为使用mod_rewrite
不是推荐的行为。
根据将请求重定向到 SSLApache 维基页面:
使用 SSL 时,您通常至少会有两个虚拟主机:一个在端口 80 上处理普通请求,另一个在端口 443 上处理 SSL。如果您希望将用户从非安全站点重定向到 SSL 站点,您可以在非安全 VirtualHost 中使用普通的 Redirect 指令
因此,尝试在非安全的 VirtualHost 中添加此指令:
Redirect permanent / https://www.mywebsite.com/
如果您无论如何都要使用rewrite
规则,您应该在非安全中添加以下几行VirtualHost
:
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.mywebsite.com/foo/ to https://www.mywebsite.com/foo/
如下所述HTTP 到 HTTPSApache 维基页面。
您的配置不起作用,因为它没有定义非安全的 VirtualHost(通常在端口 80 上)来处理 http 请求并将其重定向到安全的 VirtualHost。
尝试添加以下几行:
<VirtualHost *:80>
ServerName dev.dom1.com
Redirect permanent / https://dev.dom1.com/
</VirtualHost>
在这种情况下,您不需要,DocumentRoot
因为这VirtualHost
会重定向所有内容。
Rewrite
配置文件中显示的规则保护安全以VirtualHost
防止通过协议访问http
,例如http://www.mywebsite.com:443/
https://www.mywebsite.com:443/
您还应该检查您的网站是否从 HTML 页面链接到正确的页面(https)。
答案2
这是一个旧帖子,但在 Ubuntu 14.04 中原来的重写有效,您只需将其更改为:
<Directory /var/www/>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>