注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Apache Rewrite 详解RewriteCond url重写

其他 开心洋葱 3690次浏览 已收录 0个评论 手机上查看

RewriteCond 重写规则执行条件


语法: RewriteCond awzsrString CondPattern
生效域: server config, virtual host, directory, .htaccess
 

特别的上面的 awzsrString, 可提供反向引用. 引用模式为: %N 其中N为(0 <= N <=9), 引用当前若干RewriteCond条件中最后符合的条件中的分组成分, 也就是括号里的内容.不过用到的不多. 反向应用多在RewriteRule里常用.
RewriteCond 语法中的 awzsrStrng 为要被检查的内容, CondPattern 是进行匹配的规则, 它是一个兼容Perl风格的正则表达式和一些其他的特有字符属性. 这里介绍一下.



第一个: ! (感叹号) 表示否的意思. 比如一个条件: 判断访问此页面的上一页URL是否包含 sex 字符的话可以用这样: RewriteCond %{HTTP_REFERER} !(sex)
第二个: < 就是小于的意思, awzsrString < CondPattern.
第三个: > 就是大于于的意思, awzsrString < CondPattern.
第四个: = 相等的意思. <, >, = 三个和通常程序语言使用的 <, >, = 功能类似.
第五个: -d 是否是一个目录. 判断awzsrString是否不是一个目录可以这样: !-d
第六个: -f 是否是一个文件. 判断awzsrString是否不是一个文件可以这样: !-f
第七个: -s 是否是一个正常的有大小的文件. 判断awzsrString是否不是一个正常的有大小的文件可以这样: !-s
第八个: -l 是否是一个快捷方式文件. 判断awzsrString是否不是一个快捷方式文件可以这样: !-l
第九个: -x 是否是一个文件并且又执行权限. 判断awzsrString是否不是一个文件并且又执行权限可以这样: !-x
第十个: -F 检查awzsrString是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。
第十一个: -U 检查awzsrString是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能.
 


另外: RewriteCond 指令后面可带 Flag, 现在只要2个可用, 一个是 NC|nocase, 不区分大小写的意思. 一个是 OR|ornext 表示连接下一个条件的意思.
RewriteCond 实际需要使用情况比如要判断一个条件成真的时候才执行相关的重写操作. 紧接着它下面的 RewriteRule 总是在RewriteCond 条件判断为真的时候才被执行.
 

看下面的一个例子:

#p#副标题#e#
#开启服务器重写模式
RewriteEngine on
#来自
www.awzsr.com 的连接访问本站时都只能访问 awzsr.php 这页.
RewriteCond %{HTTP_REFERER} (
www.awzsr.com)
RewriteRule (.*)$ awzsr.php
#来自
www.awzsr.com 的连接访问本站时都只能访问 newawzsr.php 这页.
RewriteCond %{HTTP_REFERER} (
www.awzsr.com)
RewriteRule (.*)$ newawzsr.php


OK, RewriteCond 就介绍到这里了. 其实很简单. 就想程序里的 if() 这样的效果. 

附送更多示例:

Apache rewrite例子集合
在 httpd 中将一个域名转发到另一个域名
虚拟主机世界近期更换了域名,新域名为 www.awzsr.com, 更加简短好记。这时需要将原来的域名 qiyetuiguang.com, 以及论坛所在地址 qiyetuiguang.com/forums/ 定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的 http://www. qiyetuiguang.com/forums/-f60.html, 让它在新的域名下继续有效,点击后转发到 http://bbs.awzsr.com/-f60.html, 这就需要用 apache 的 Mod_rewrite 功能来实现。

在< virtualhost> 中添加下面的重定向规则:

RewriteEngine On
# Redirect qiyetuiguang.com/forums to bbs.awzsr.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.awzsr.com/$1 [R=permanent,L]

# Redirect qiyetuiguang.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.awzsr.com/$1 [R=permanent,L]

添加了上面的规则以后, 里的全部内容如下:


< virtualhost *:80>
ServerAlias qiyetuiguang.com
ServerAdmin [email protected]
DocumentRoot /path/to/webhosting-world/root
ServerName www.qiyetuiguang.com

RewriteEngine On
# Redirect qiyetuiguang.com/forums to bbs.awzsr.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.awzsr.com/$1 [R=permanent,L]

# Redirect qiyetuiguang.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.awzsr.com/$1 [R=permanent,L]
< /virtualhost>

 URL重定向例子一:


1.http://www.awzsr.com/xxx.php-> http://www.awzsr.com/xxx/
2.http://yyy.zzz.com-> http://www.awzsr.com/user.php?username=yyy 的功能

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.awzsr.com
RewriteCond %{REQUEST_URI} !^user\.php$
RewriteCond %{REQUEST_URI} \.php$
RewriteRule (.*)\.php$ http://www.awzsr.com/$1/ [R]

RewriteCond %{HTTP_HOST} !^www.awzsr.com
RewriteRule ^(.+) %{HTTP_HOST} [C]
RewriteRule ^([^\.]+)\.zzz\.com http://www.awzsr.com/user.php?username=$1

例子二:
/type.php?typeid=* –> /type*.html
/type.php?typeid=*&page=* –> /type*page*.html

RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]

 

 


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Apache Rewrite 详解RewriteCond url重写
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
开心洋葱,开心洋葱头,水墨

您必须 登录 才能发表评论!

……