Apache域名跳转----配置rewrite模块
1.rewrite模块简介
Apache中rewrite规则代码均写在<ifModule mod_rewrite>模块下. Web服务可能需要多个域名,且彼此间要有主次,输入次域名后会自动转入主域名进行访问. 状态码:301 永久跳转;302 暂时跳转;
2.修改一下主配置文件
vi /usr/local/apache2/conf/httpd.conf • 1
1)搜索:/rewrite 取消这行的注释 LoadModule rewrite_module modules/mod_rewrite.so 2)搜索:/httpd-vhost 取消这行的注释 Include conf/extra/httpd-vhosts.conf
3.简单的rewrite规则配置案例
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf # 添加如下:( 无论访问www.cat.com或访问www.god.com都会跳转到www.007.com) <VirtualHost *:80> DocumentRoot "/tmp/007" <IfModule mod_rewrite.c> RewriteEngine on # 打开rewrite功能 RewriteCond %{HTTP_HOST} ^www.cat.com$ [OR] RewriteCond %{HTTP_HOST} ^www.god.com$ RewriteRule ^/(.*)$ http://www.007.com/$1 [R=301,L] </IfModule> </VirtualHost>
4.语法检测
#检查配置文件是否有错误 /usr/local/apache2/bin/apachectl -t
5.添加本地解析
vi /etc/hosts 添加以下内容: ip地址 ww.007.com ip地址 www.cat.com ip地址 www.god.com
6.重启http服务
/usr/local/apache2/bin/apachectl restart
7.测试
curl www.cat.com 或者 curl -I www.cat.com
8.相关rewrite规则
1)禁止指定user_agent RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR] # 禁止curl浏览器访问,NC不区分大小写 RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC] # 禁止chrome浏览器访问,NC不区分大小写 RewriteRule .* - [F] # F 禁止URL,返回403HTTP状态码
2)限制某个目录
RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC] # 禁止访问/tmp目录 RewriteRule .* - [F]
9.rewrite变量
%{HTTP_USER_AGENT} # 访问的user_agent %{HTTP_HOST} # 当前访问的网址,只指前缀。如:www.cat.com,不包含"http://"等 %{REQUEST_URI} # 访问的相对地址,就是域名之后的部分,格式上包含最前面的"/" 如:www.007.com/catgod007/index.html # www.007.com表示HOST,catgod007/index.html表示URI
感谢大家,点赞,收藏,关注,评论!