apache rewrite 规则

一般第一行 开启重写引擎

RewriteEngine on

任何mod_rewrite代码之前都要加上RewriteEngine on这个状态,

RewriteEngine off 与RewriteEngine on之间的规则将不起作用

 

 

 

RewriteRule指令:

 

   RewriteRule  重写后的模式字符串  重写前的字符串

 

例如 从写前的字符串 test.php?categ=15&id=12 要重写成 test/15/12

 

RewriteRule  ^/?test/([0-9]+)/([0-9]+)$  test.php?categ=$1&id=$2

 

   其中 /? 是为了兼容以前版本的apache  一代Apache要求{REQUEST_URI}有斜杠而二代Apache却不允许

这样 当url中 有 test/15/12 形式的字符串时 就会被转化为 test.php?categ=15&id=12

 

   如果.htaccess文件在根目录 那么模式字符串就从域名后面开始匹配,如果是在根目录下某个文件夹比如(site1) 那么就从 http://localhost/site1/ 后面开始匹配。

 

 

 

 

RewriteCond 指令

  重写条件 判断url是否符合规则 符合规则的url将被重写

RewriteCond %{HTTP_HOST}  !^www\.mycom\.com$ [NC]
RewriteRule ^(.*)$  http://www.mycom.com%{REQUEST_URI} [R=301,L]

 

上面两句代表 如果url中host名称 不是www.mycom.com 就将其重写为 http://www.mycom.com%{REQUEST_URI}

 

其中%{HTTP_HOST} 是一个Apache服务器变量 代表主机 %{REQUEST_URI} 为查询字符串。[NC] 代表忽略大小写 R=301 永久重定向

 

例如 防止图片盗链

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?mycom\.com/ [NC]

RewriteRule \.(gif|jpg|png)$ - [F]

如果{HTTP_REFERER}值不为空,或者不是来自你自己的域名,这个规则用[F]FLAG阻止以gif|jpg|png 结尾的URL

你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。

 

替换成其他图片

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mycom\.com/ [NC]
RewriteCond %{REQUEST_URI} !downloadad1\.gif$ [NC]
RewriteRule \.(gif|png|jpg|png)$ http://www.mycom.com/downloadad1.gif [R,L]

上面加了一个条件,让其可以访问替换后的图片

 

 如果你的主机没有提供404页面重定向服务,那么我们自己创建。

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .? /404.php [L]

 

这里-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=$1参数:

RewriteRule ^/?(.*)$ /404.php?url=$1 [L]9

这样,你的404页面就可以做一些其他的事情,例如默认信息,发一个邮件提醒,加一个搜索,等等。

 

另外还可以通过 http.conf 中

ErrorDocument 404 /404.html 来实现

 

 

 

其中apache变量就是php中$_SERVER 数组中的一部分

例如{HTTP_USER_AGENT} 就是php中的$_SERVER['HTTP_USER_AGENT']  {SERVER_PORT} => $_SERVER['SERVER_PORT']

 

 FLAGS属性

mod_rewrite用”FLAGS”来建立重写条件以及其他属性。我们用中括弧将FLAGS包起来,放在条件或者是规则的末尾,用逗号将多个FLAGS分隔。以下列表是你需要熟悉的几个主要FLAGS:

last|L -[L]告诉Apache服务器一系列的条件或者是规则将在它出现后结束,换句话说就是[L]不出现,mod_rewrite将会一直执行。

 

nocase|NC -[NC]告诉Apache服务器忽略正则中的大小写,它经常被用到{HTTP_HOST}服务器参数上,因为域名里面是不会区分大小写的。

 

redirect|R -[R] 经常引用到触发可见的定向。默认情况下它是一个HTTP 302的临时重定向,但是你可以注明具体的HTTP 代码,比如你可以用[R=301]来表明这是一个永久重定向,这对搜索引擎抓取你重定向后的网页相当有用。

 

qsappend|QSA -[QSA] 用于添加新的查询参数。你可以在原查询参数后面定义新的查询参数,但命名时注意不要重复已存在的参数名。错误的引用[QSA]将会破坏原来的查询参数导致重定向错误。

 

forbidden|F -[F]告诉Apache响应请求时不提供页面。其原理就是Apache会发出一个403 HTTP相应,可以保护网站不被未经授权的或者其他盗链访问。

 

ornext|OR -[OR] 作为默认值[AND]的反义词,可以通过逻辑关系将一系列重写条件组合起来。

 

next|N -[N]可以让你的重写条件循环匹配,当你不知道{REQUEST_URI}有多少字符进行匹配的时候很有用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值