apache重写时%{REQUEST_FILENAME}的使用方法和技巧

RewriteCond %{REQUEST_FILENAME} !-f

如果文件存在,就直接访问文件,不进行下面的RewriteRule.


RewriteCond %{REQUEST_FILENAME} !-d \

如果目录存在就直接访问目录不进行RewriteRule


RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg)$

如果是这些后缀的文件,就直接访问文件,不进行Rewrite

在启用二级域名的时候要特别注意这个问题,比如想要将

http://test.51zwy.com 重写到 test.php

RewriteCond %{HTTP_HOST} ^(test)\. [NC]
RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg|\.xml)
RewriteRule (.*) %1.php [QSA,L]          (注意在这条规则之前不要添加%{REQUEST_FILENAME}规则,否则在apache2.4下将永远访问的是首页)

 

apache路径重写(rewrite)

注意:http://www.xxx.com/a.html
根据RewriteBase规则规定,如果rewritebase 为/,将会匹配a.html
RewriteBase中()中的内容可以用$1,$2,$3….取得
RewriteCond中()中的内容可以用%1,%2,%3….取得

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www(.*) [NC]
RewriteCond %{REQUEST_URI} ^/(tank|product|\d+)$ [NC]
RewriteRule ^(.*)$ http://product.leshisz.com/$1 [L,R=301]

RewriteEngine on   #指开启路径重写
RewriteCond            #添加执行重新的条件 默认为AND 若是或的情况在括号中添加 OR
RewriteRule             #上面满足条件的重写

“redirect|R[=code]” 强制重定向。经常引用到触发可见的定向。默认情况下它是一个HTTP 302的临时重定向,但是你可以注明具体的HTTP 代码,比如你可以用[R=301]来表明这是一个永久重定向,这对搜索引擎抓取你重定向后的网页相当有用。
“proxy|P” 强制为代理
“forbidden|F” 403 禁止。告诉Apache响应请求时不提供页面。其原理就是Apache会发出一个403 HTTP相应,可以保护网站不被未经授权的或者其他盗链访问。
“nocase|NC” 忽略正则表达式中的大小写。它经常被用到{HTTP_HOST}服务器参数上,因为域名里面是不会区分大小写的。
“next|N” 回到第一条规则。可以让你的重写条件循环匹配,当你不知道{REQUEST_URI}有多少字符进行匹配的时候很有用。
“last|L” 最后一个规则。告诉Apache服务器一系列的条件或者是规则将在它出现后结束,换句话说就是[L]不出现,mod_rewrite将会一直执行。
“noescape|NE” 在输出中不对URI作转义。此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(如‘%’, ‘$’, ‘;’等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,如:
RewriteRule /foo/(.*) /bar?arg=P1\=$1 [R,NE]
可以使‘/foo/zed’转向到一个安全的请求‘/bar?arg=P1=zed’.
“skip|S=N” 跳过下面的N条规则。
下面是服务器上的变量:

HTTP变量
HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE,
HTTP_FORWARDED, HTTP_HOST, HTTP_PROXY_CONNECTION, HTTP_ACCEPT
连结和请求的变量
REMOTE_ADDR, REMOTE_HOST, REMOTE_USER, REMOTE_IDENT,
REQUEST_METHOD, SCRIPT_FILENAME, PATH_INFO, QUERY_STRING, AUTH_TYPE
服务器内部变量
DOCUMENT_ROOT, SERVER_ADMIN, SERVER_NAME, SERVER_ADDR,
SERVER_PORT, SERVER_PROTOCOL, SERVER_SOFTWARE
系统变量
TIME_YEAR, TIME_MON, TIME_DAY, TIME_HOUR,
TIME_MIN, TIME_SEC, TIME_WDAY, TIME
mod_rewrite特殊值
API_VERSION, THE_REQUEST, REQUEST_URI, REQUEST_FILENAME

 

 

apache启用rewrite

配置步骤

第一步:找到apache的配置文件httpd.conf(文件在conf目录下)

第二步:你首先必须得让服务器支持mod_rewrite,如果你使用的是虚拟主机,请事先询问你的主机提供商。

打开httpd.conf,找到

#LoadModule rewrite_module modules/mod_rewrite.so

把#去掉

找到AllowOverride None 改成 AllowOverride All

:AllowOverride 的参数设置为ALL,表示整台服务器上都支持URL规则重写。Apache 服务器要读每个网站下目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则就不会有任何效果。

对于不同的网址,需要在APACHE中增加如下内容

<Directory “E:/Apache Group/Apache2/htdocs”>

/*引号里代表你的web存放目录*/

/*如果是Linux,只要你定位到你网站目录即可*/
Options FollowSymLinks
AllowOverride None

</Directory>

第三步:重启apache服务器。