这是我到目前为止的代码:
<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的主要新手,所以任何建议都表示赞赏。
答案 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)。