Apache 的 Rewrite 模块
加载模块
在httpd.conf文件里使下面模块生效:
LoadModule ssl_module modules/mod_ssl.so # 如果使用https证书,这个模块功能一定要打开!
LoadModule rewrite_module modules/mod_rewrite.so # 重写模块
配置根目录
在httpd.conf文件里添加:
DocumentRoot "/data/vhosts"
<Directory "/data/vhosts">
Options FollowSymLinks MultiViews Includes
AllowOverride All # AllowOverride None一定要修改为AllowOverride All
Require all granted
</Directory>
设置重写
http跳转到https
在网站根目录下面添加该文件".htaccess"目录访问控制文件(或直接修改httpd.conf文件),并添加如下内容:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>
目的:让用户访问传统的http://转到https://上来。
第一句:启动Rewrite引擎;
第三句:RewriteCond是重写条件,!^443$
是正则表达式,!
表示否定,^
是开头,$
是结束;
第四句:.*
是任何数量的任意字符,%{SERVER_NAME}
是服务器域名或IP,%{REQUEST_URI}
是请求路径,R
表示重定向,L
表示立即停止重写(不再应用其他重写规则);
整句的意思是讲:启动Rewrite模块,将所有访问非443端口的域名请求,url地址内容不变,将http://变成https://。
某些页面跳转
实现某个页面的https跳转需求:
访问http://baidu.com/beijing/...... 强制跳转到https://baidu.com/beijing/......
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} /beijing
RewriteRule ^.*$ https://%{SERVER_NAME}/beijing/ [R,L]
</IfModule>
此时%{SERVER_NAME}
就是baidu.com,%{REQUEST_URI}
就是/beijing。