十、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企业运维实战》

posted @ 2021-05-10 12:23  努力吧阿团  阅读(199)  评论(0)    收藏  举报