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。

扩展阅读:
Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)

posted @ 2021-02-28 18:36  ageovb  阅读(179)  评论(0编辑  收藏  举报