始终将http重定向到https

时间:2014-03-07 21:05:17

标签: .htaccess http redirect https

这是我到目前为止的代码:

<IfModule !mod_rewrite.c>
    LoadModule rewrite_module modules/mod_rewrite.so
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</IfModule>

理想情况下,我正在尝试实现任何请求的情况:

http://domain.com/

和/或

http://www.domain.com/ 

被重定向到

https://domain.com/whatever/sub/directory

到目前为止,我所做的尝试只是将根域重定向到HTTPS,当我进入站点的某个子目录并从URL中删除HTTPS时,它不会将其重定向回HTTPS,它只是留在HTTP上。

我是htaccess的主要新手,所以任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:0)

删除前导斜杠:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [NE,R=301,L]
  • .htaccess是每个目录指令,Apache从RewriteRule URI模式中剥离当前目录路径(从而导致斜杠)。

答案 1 :(得分:0)

如果ssl.conf文件不存在,则可能必须安装mod_ssl模块 如果文件 - /etc/httpd/conf.d/ssl.conf存在,请将标题中的所有内容注释掉,包括标题本身。

确保“LoadModule ssl_module modules / mod_ssl.so”指令存在且未在文件中注释掉。否则添加它。

修改/etc/httpd/conf/httpd.conf文件。将以下部分添加到最后 -

NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
Redirect permanent / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /var/cert/abcd344.crt
    SSLCertificateKeyFile /var/cert/www_example_com.key
    SSLCertificateChainFile /var/cert/gd_bundle-g2-g1.crt
</VirtualHost>

以上设置会将所有请求重定向到端口443(HTTPS)。