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}有多少字符进行匹配的时候很有用。