rewrite 规则实战案例

Apache rewrite规则使用中有三个概念需要理解,分别为:rewrite结尾标识符,rewrite规则常用表达式,Apache rewrite变量,以下为三个概念的详解:

(1)Apache rewrite结尾标识符,用于rewrite规则末尾,表示规则的执行属性。详解如下:

R[ =code ](force redirect):强制外部重定向。
G(force URL to be gone):强制URL为gone,返回410HTTP状态码。
P(force proxy):强制使用代理转发。
L(last rule):匹配当前规则为最后一条匹配规则,停止匹配后续规则。
N(next round):重新从第一条规则开始匹配。
C(chained with next rule):与下一条规则关联。
T=MIME-type(force MIME type):强制MIME类型。
NC(no case):不区分大小写。

(2)Apache rewrite规则常用表达式,主要用于匹配参数,字符串及过滤设置。详解如下:

. :匹配任何单字符。
[word]:匹配字符串word。
[^word]:不匹配字符串word。
yunan | yunanteach:可选择字符串yunan | yunanteach。
?:匹配0到1个字符
*:匹配0到多个字符。
+:匹配1到多个字符。
^:字符串开始标志。
$:字符串结束标志。
\n:转义符标志。

(3)Apache rewrite变量,常用于匹配HTTP请求头信息,浏览器主机名,URL等。代码如下:

HTTP headers:HTTP_USER_AGENT,HTTP_REFERER,HTTP_COOKIE,HTTP_HOST,HTTP_ACCEPT;

connection & request:REMOTE_ADDR,QUERY_STRING;

server internals:DOCUMENT_ROOT,SERVER_PORT,SERVER_PROTOCOL;

system stuff:TIME_YEAR,TIME_MON,TIME_DAY。

详解如下:

HTTP_USER_AGENT:用户使用的代理,例如浏览器。
HTTP_REFERER:告知服务器,从哪个页面来访问的。
HTTP_COOKIE:客户端缓存,主要用于存储用户名和密码等信息。
HTTP_HOST:匹配服务器ServerName域名。
HTTP_ACCEPT:客户端的浏览器支持的MIME类型。
REMOTE_ADDR:客户端的IP地址。
QUERY_STRING:URL中访问的字符串。
DOCUMENT_ROOT:服务器发布目录。
SERVER_PORT:服务器端口。
SERVER_PROTOCOL:服务器端协议。
TIME_YEAR:年。
TIME_MON:月。
TIME_DAY:日。

首选在/usr/local/apache2/conf/httpd.conf文件中将下面一行取消注释

154 LoadModule rewrite_module modules/mod_rewrite.so

1、将 jfed u. net 跳转至 www. jfedu. net ,说明如下:
RewriteEngine on :启用 rewrite 引擎。
RewriteCond % {HTTP _HOST} " jfedu. net [NC]:匹配以 jfedu. net 开头的域名,NC 忽略大小写。
RewriteRule "/ (.) $http: / www. jfedu. net/ $1 [ L] : (.)表示任意字符串 $1表示引用( .*)的中任意内容。
将 www.jfl.com www. jf2. com jfedu. net 跳转至 www. jfedu. net, OR 含义表示或者,代码如下:

[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
        DocumentRoot "/usr/local/apache2/htdocs/jfedu"
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} www.jf1.com [NC,OR]
        RewriteCond %{HTTP_HOST} www.jf2.com [NC,OR]
        RewriteCond %{HTTP_HOST} ^jfedu.net  [NC]
        RewriteRule ^/(.*)$ http://www.jfedu.net/$1 [L]
</IfModule>
</VirtualHost>

[root@localhost ~]# mkdir -p /usr/local/apache2/htdocs/jfedu/
# 创建发布目录
[root@localhost ~]# mkdir -p /usr/local/apache2/htdocs/jfedu/
# 重启使配置生效

最后于C:\Windows\System32\drivers\etc中添加hosts即可实现访问www.jf1.com或者www.jf2.com 跳转至www.jfedu.net

2、访问 www. jfedu. net 首页,跳转至 www.jfedu.net/newindex ,R=301 表示永久重定向

[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
        DocumentRoot "/usr/local/apache2/htdocs/jfedu"
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule ^/$ http://www.jfedu.net/newindex [L,R=301]
</IfModule>
</VirtualHost>
[root@localhost jfedu]# /usr/local/apache2/bin/apachectl restart
[root@localhost ~]# cd /usr/local/apache2/htdocs/jfedu
[root@localhost jfedu]# mkdir newindex
[root@localhost jfedu]# echo "

www.jfedu.com/newindex Pages

"
>/usr/local/apache2/htdocs/jfedu/newindex/index.html # 创建转换后的目录与文件

至此即可实现访问 www. jfedu. net 首页,跳转至www.jfedu.net/newindex

你可能感兴趣的:(Linux,apache,服务器,linux)