十、Apache配置rewrite规则
配置301跳转案例
使用Apache的rewrite会用到mod_rewrite.so模块
1、编辑主配置文件
$ vim /usr/local/apache2/conf/httpd.conf
...
153 LoadModule rewrite_module modules/mod_rewrite.so #去掉该行注释
479 Include conf/extra/httpd-vhosts.conf #去掉该行注释
2、编辑虚拟主机配置文件
$ vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/www"
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.tz1.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.tz2.com$
RewriteRule ^/(.*)$ http://www.tz.com/$1 [R=301,L]
</IfModule>
</VirtualHost>
OR:或者
RewriteEngine on:开启跳转模块
RewriteCond 是跳转条件,RewriteRule 是跳转规则
访问www.tz1.com或者www.tz2.com都会执行301跳转到www.tz.com域名上去
3、编写测试页面
$ mkdir /www
$ echo 'This is /www page!' >/www/index.html
4、修改hosts文件
$ vim /etc/hosts
10.154.0.113 www.tz1.com
10.154.0.113 www.tz2.com
10.154.0.113 www.tz.com
5、生效配置文件
$ apachectl -t #检查配置文件语法
$ apachectl graceful #使配置文件生效,可以不重启服务
6、效果如下



禁止指定user_agent访问案例
这里配置禁止curl跟谷歌浏览器访问
配置文件如下:
$ vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/www"
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC]
RewriteRule .* - [F]
</IfModule>
</VirtualHost>
RewriteRule .* - [F] #禁止
RewriteCond %{HTTP_USER_AGENT} ^.chrome. [NC] #不区分大小写
效果如下

禁止访问某个目录案例
这里配置的禁止访问tz/目录
配置文件如下:
$ vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs"
<Directory /usr/local/apache2/htdocs/>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.tz/. [NC]
RewriteRule .* - [F]
</IfModule>
</Directory>
</VirtualHost>
效果如下:

rewrite结尾标识符
用于rewrite规则末尾,表示规则执行的属性
常用标识符:
R=301:强制外部重定向
[F]:禁用URL,返回403HTTP状态码。
NC:不区分大小写
[OR]:或者
L:匹配到当前规则后,停止匹配后续规则
其他标识符:

rewrite变量
用于匹配HTTP请求头信息、浏览器主机名、URL等。
常用变量:
%{HTTP_USER_AGENT} :访问的user_agent
%{HTTP_HOST} :当前访问的网址,只是指前缀部分,格式是www.xxx.com,不包括“http://”和“/” %{REQUEST_URI} :表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”;如:www.123.com/xiang/1.html,其中www.123.com表示HOST,xiang/1.html表示URI
其他变量:

rewrite规则常用表达式
用于匹配参数、字符串及过滤设置。

参考资料:
B站:千锋教育云计算650集-P141
《曝光:Linux企业运维实战》

浙公网安备 33010602011771号