这里只是简单记录一些学习示例,高手略过,新手可以看一下。
Nginx Rewrite规则相关指令
Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下:
<code>rewrite ^/b/(.*)\.html /play.php?video=$</code><code>1</code> <code>break</code><code>;</code>
如果加上if语句,示例如下:
<code>if</code> <code>(!-f $request_filename)</code>
<code>rewrite ^/img/(.*)$ /site/$host/images/$</code><code>1</code> <code>last;</code>
Nginx与Apache的Rewrite规则实例对比
简单的Nginx和Apache 重写规则区别不大,基本上能够完全兼容。例如:
Apache Rewrite 规则:
<code>RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$</code><code>1</code> <code>[L]</code>
<code>RewriteRule ^/ceshi/$ /zl/ceshi.php [L]</code>
<code>RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$</code><code>2</code> <code>[L]</code>
<code>RewriteRule ^/pingce([</code><code>0</code><code>-</code><code>9</code><code>]*)/$ /zl/pingce.php?id=$</code><code>1</code> <code>[L]</code>
Nginx Rewrite 规则:
<code>rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$</code><code>1</code> <code>last;</code>
<code>rewrite ^/ceshi/$ /zl/ceshi.php last;</code>
<code>rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$</code><code>2</code> <code>last;</code>
<code>rewrite ^/pingce([</code><code>0</code><code>-</code><code>9</code><code>]*)/$ /zl/pingce.php?id=$</code><code>1</code> <code>last;</code>
由以上示例可以看出,Apache的Rewrite规则改为Nginx的Rewrite规则,其实很简单:Apache的RewriteRule指令换成Nginx的rewrite指令,Apache的[L]标记换成Nginx的last标记,中间的内容不变。
如果Apache的Rewrite规则改为Nginx的Rewrite规则后,使用nginx -t命令检查发现nginx.conf配置文件有语法错误,那么可以尝试给条件加上引号。例如一下的Nginx Rewrite规则会报语法错误:
<code>rewrite ^/([</code><code>0</code><code>-</code><code>9</code><code>]{</code><code>5</code><code>}).html$ /x.jsp?id=$</code><code>1</code> <code>last;</code>
加上引号就正确了:
<code>rewrite “^/([</code><code>0</code><code>-</code><code>9</code><code>]{</code><code>5</code><code>}).html$” /x.jsp?id=$</code><code>1</code> <code>last;</code>
Apache与Nginx的Rewrite规则在URL跳转时有细微的区别:
<code>RewriteRule ^/html/tagindex/([a-zA-Z]+)/.*$ /$</code><code>1</code><code>/ [R=</code><code>301</code><code>,L]</code>
<code>rewrite ^/html/tagindex/([a-zA-Z]+)/.*$ http:</code><code>//$host/$1/ permanent;</code>
以上示例中,我们注意到,Nginx Rewrite 规则的置换串中增加了“http://$host”,这是在Nginx中要求的。
另外,Apache与Nginx的Rewrite规则在变量名称方面也有区别,例如:
<code>RewriteRule ^/user/login/$ /user/login.php?login=</code><code>1</code><code>&forward=http:</code><code>//%{HTTP_HOST} [L]</code>
<code>rewrite ^/user/login/$ /user/login.php?login=</code><code>1</code><code>&forward=http:</code><code>//$host last;</code>
Apache与Nginx Rewrite 规则的一些功能相同或类似的指令、标记对应关系:
Apache的RewriteCond指令对应Nginx的if指令;
Apache的RewriteRule指令对应Nginx的rewrite指令;
Apache的[R]标记对应Nginx的redirect标记;
Apache的[P]标记对应Nginx的last标记;
Apache的[R,L]标记对应Nginx的redirect标记;
Apache的[P,L]标记对应Nginx的last标记;
Apache的[PT,L]标记对应Nginx的last标记;
允许指定的域名访问本站,其他域名一律跳转到http://www.aaa.com
<code>RewriteCond %{HTTP_HOST} ^(.*?)\.domain\.com$</code>
<code>RewriteCond %{HTTP_HOST} !^qita\.domain\.com$</code>
<code>RewriteCond %{DOCUMENT_ROOT}/market/%</code><code>1</code><code>/index.htm -f</code>
<code>RewriteRule ^/wu/$ /market/%</code><code>1</code><code>/index.htm [L]</code>
Nginx的if指令不支持嵌套,也不支持AND、OR等多条件匹配,相比于Apache的RewriteCond,显得麻烦一些,但是,我们可以通过下一页的Nginx配置写法来实现这个示例:
<code>if</code> <code>($host ~* ^(.*?)\.domain\.com$) </code><code>set</code> <code>$</code><code>var</code><code>_wupin_city $</code><code>1</code><code>; </code><code>set</code> <code>$</code><code>var</code><code>_wupin ‘</code><code>1</code><code>′;</code>
<code>if</code> <code>($host ~* ^qita\.domain\.com$)</code>
<code> </code><code>set</code> <code>$</code><code>var</code><code>_wupin ‘</code><code>0</code><code>′;</code>
<code>if</code> <code>(!-f $document_root/market/$</code><code>var</code><code>_wupin_city/index.htm)</code>
<code> </code><code>set</code> <code>$</code><code>var</code><code>_wupin ‘</code><code>0</code><code>′;</code>
<code>if</code> <code>($</code><code>var</code><code>_wupin ~ ‘</code><code>1</code><code>′)</code>
<code> </code><code>rewrite ^/wu/$ /market/$</code><code>var</code><code>_wupin_city/index.htm last;}</code>
rewrite 的语法
用法: rewrite 正则 替换 标志位
作用域: server, location, if
这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。
注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。
nginx的rewrite规则参考:
set
if
return
break
rewrite
麻雀虽小,五脏俱全.只是简单的几个指令却可以做出绝对不输apache的简单灵活的配置.
1.set 主要是用来设置变量用的,没什么特别的
2.if 主要用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等,
用法: if(条件) {…}
- 当if表达式中的条件为true,则执行if块中的语句
- 当表达式只是一个变量时,如果值为空或者任何以0开头的字符串都会当作false
- 直接比较内容时,使用 = 和 !=
- 使用正则表达式匹配时,使用
~ 大小写敏感匹配 ~* 大小写不敏感匹配 !~ 大小写敏感不匹配 !~* 大小写不敏感不匹配
随便一提,因为nginx使用花括号{}判断区块,所以当正则中包含花括号时,则必须用双引号将正则包起来.对下面讲到的rewrite语句中的正则亦是如此.
比如 “\d{4}\d{2}\.+”
- 使用-f,-d,-e,-x检测文件和目录,跟~类似,前置!则为”非”操作
-f 检测文件存在 -d 检测目录存在 -e 检测文件,目录或者符号链接存在 -x 检测文件可执行
举例:
<code>if</code> <code>( $http_user_agent ~ MSIE ) { rewrite ^ (. * )$ /msie / $</code><code>1</code> <code>break</code><code>; }</code>
//如果UA包含”MSIE”,rewrite 请求到/msie目录下
<code>if</code> <code>( $http_cookie ~ * </code><code>"id=([^;] +)(?:;|$)"</code> <code>) { </code><code>set</code> <code>$id $</code><code>1</code><code>;}</code>
//如果cookie匹配正则,设置变量$id等于正则引用部分
<code>if</code> <code>( $request_method = POST ) { </code><code>return</code> <code>405</code><code>; }</code>
//如果提交方法为POST,则返回状态405 (Method not allowed)
<code>if</code> <code>( !-f $request_filename ) { </code><code>break</code><code>; proxy_pass http:</code><code>//127.0.0.1; }</code>
//如果请求文件名不存在,则反向代理localhost
<code>if</code> <code>( $args ~ post=</code><code>140</code> <code>) { rewrite ^ http: </code><code>//example.com / permanent;}</code>
//如果query string中包含”post=140″,永久重定向到example.com
3.return 可用来直接设置HTTP返回状态,比如403,404等(301,302不可用return返回,这个下面会在rewrite提到)
4.break 立即停止rewrite检测,跟下面讲到的rewrite的break flag功能是一样的,区别在于前者是一个语句,后者是rewrite语句的flag
5.rewrite 最核心的功能(废话)
其中标志位有四种
break – 停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果 last – 停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果,这点后面会跟nginx的location匹配一起提到 redirect – 返回302临时重定向,一般用于重定向到完整的URL(包含http:部分) permanent – 返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)
因为301和302不能简单的只单纯返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了. 作为替换,rewrite可以更灵活的使用redirect和permanent标志实现301和302. 比如上一篇日志中提到的Blog搬家要做的域名重定向,在nginx中就会这么写
<code>rewrite ^ (.* )$ http:</code><code>//newdomain.com/ permanent;</code>
举例来说一下rewrite的实际应用
rewrite ^ (/download /. * ) /media / (. * )\.. *$ $1 /mp3 / $2.mp3 last;
如果请求为 /download/eva/media/op1.mp3 则请求被rewrite到 /download/eva/mp3/op1.mp3
要注意的是rewrite有很多潜规则需要注意:
- rewrite的生效区块为sever, location, if
- rewrite只对相对路径进行匹配,不包含hostname 比如说以上面301重定向的例子说明
<code>rewrite ~ * cafeneko\.info http:</code><code>//newdomain.com / permanent;</code>
这句是永远无法执行的,以这个URL为例
http://blog.cafeneko.info/2010/10/neokoseseiki_in_new_home/?utm_source=rss&utm_medium=rss&utm_campaign=neokoseseiki_in_new_home
其中cafeneko.info叫做hostname,再往后到?为止叫做相对路径,?后面的一串叫做query string
对于rewrite来说,其正则表达式仅对”/2010/10/neokoseseiki_in_new_home”这一部分进行匹配,即不包含hostname,也不包含query string .所以除非相对路径中包含跟域名一样的string,否则是不会匹配的.
如果非要做域名匹配的话就要使用if语句了,比如进行去www跳转
if ( $host ~ * ^www\. (cafeneko\.info) ) { set $host_without_www $1; rewrite ^ (. * )$ http: // $host_without_www $1permanent; }
- 使用相对路径rewrite时,会根据HTTP header中的HOST跟nginx的server_name匹配后进行rewrite,如果HOST不匹配或者没有HOST信息的话则rewrite到server_name设置的第一个域名,如果没有设置server_name的话,会使用本机的localhost进行rewrite
- 前面提到过,rewrite的正则是不匹配query string的,所以默认情况下,query string是自动追加到rewrite后的地址上的,如果不想自动追加query string,则在rewrite地址的末尾添加?
rewrite ^ /users/ (. * )$ /show? user= $1? last;
rewrite的基本知识就是这么多..但还没有完..还有最头疼的部分没有说…
/2 Nginx location 和 rewrite retry
nginx的rewrite有个很奇特的特性 — rewrite后的url会再次进行rewrite检查,最多重试10次,10次后还没有终止的话就会返回HTTP 500
last和break最大的不同在于
- break是终止当前location的rewrite检测,而且不再进行location匹配
– last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则
还是这个该死的例子
location /download/ { rewrite ^ ( /download /. * ) /media / (. * )\.. *$ $1 /mp3 / $2.mp3 ; rewrite ^ ( /download /. * )/movie / (. * )\.. *$ $1 /avi / $2.mp3 ; rewrite ^ ( /download /. * ) /avvvv / (. * )\.. *$ $1 /rmvb / $2.mp3 ; }
上面没有写标志位,请各位自行脑补…
如果请求为 /download/acg/moive/UBW.avi
last的情况是: 在第2行rewrite处终止,并重试location /download..死循环
break的情况是: 在第2行rewrite处终止,其结果为最终的rewrite地址.
也就是说,上面的某位试图下载eva op不但没下到反而被HTTP 500射了一脸的例子正是因为用了last标志所以才会造成死循环,如果用break就没事了.
location /download/ { rewrite ^ ( /download /. * ) /media / (. * )\.. *$ $1 /mp3 / $2.mp3 break; }
对于这个问题,我个人的建议是,如果是全局性质的rewrite,最好放在server区块中并减少不必要的location区块.location区块中的rewrite要想清楚是用last还是break.
有些情况是要用last的. 典型的例子就是wordpress的permalink rewrite
常见的情况下, wordpress的rewrite是放在location /下面,并将请求rewrite到/index.php
这时如果这里使用break乃就挂了,不信试试. b( ̄▽ ̄)d…因为nginx返回的是没有解释的index.php的源码…
这里一定要使用last才可以在结束location / 的rewrite, 并再次命中location ~ \.php$,将其交给fastcgi进行解释.其后返回给浏览器的才是解释过的html代码.
关于nginx rewrite的简介到这里就全部讲完了,水平及其有限,请大家指出错漏…
结合QeePHP的例子
<code>if</code> <code>(!-d $request_filename) {</code>
<code> </code><code>rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?</code><code>namespace</code><code>=user&amp;controller=$</code><code>1</code><code>&amp;action=$</code><code>2</code><code>&amp;$</code><code>3</code> <code>last;</code>
<code> </code><code>rewrite ^/([a-z-A-Z]+)/?$ /index.php?</code><code>namespace</code><code>=user&amp;controller=$</code><code>1</code> <code>last;</code>
<code> </code><code>break</code><code>; </code>
<code>}</code>
多目录转成参数
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
<code>if</code> <code>($host ~* (.*)\.domain\.com) {</code>
<code> </code><code>set</code> <code>$sub_name $</code><code>1</code><code>;</code>
<code> </code><code>rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$</code><code>1</code> <code>last;</code>
目录对换
/123456/xxxx -> /xxxx?id=123456
<code>rewrite ^/(\d+)/(.+)/ /$</code><code>2</code><code>?id=$</code><code>1</code> <code>last;</code>
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
<code>if</code> <code>($http_user_agent ~ MSIE) {</code>
<code> </code><code>rewrite ^(.*)$ /nginx-ie/$</code><code>1</code> <code>break</code><code>;</code>
目录自动加“/”
<code>if</code> <code>(-d $request_filename){</code>
<code> </code><code>rewrite ^/(.*)([^/])$ http:</code><code>//$host/$1$2/ permanent;</code>
禁止htaccess
<code>location ~/\.ht {</code>
<code> </code><code>deny all;</code>
禁止多个目录
<code>location ~ ^/(cron|templates)/ {</code>
<code> </code><code>break</code><code>;</code>
禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;
<code>location ~ ^/data {</code>
禁止单个目录
不能禁止.log.txt能请求
<code>location /searchword/cron/ {</code>
禁止单个文件
<code>location ~ /data/sql/data.sql {</code>
<code>deny all;</code>
给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志
<code>location ~(favicon.ico) {</code>
<code> </code><code>log_not_found off;</code>
<code> </code><code>expires 99d;</code>
<code>location ~(robots.txt) {</code>
<code> </code><code>expires 7d;</code>
设定某个文件的过期时间;这里为600秒,并不记录访问日志
<code>location ^~ /html/scripts/loadhead_1.js {</code>
<code> </code><code>access_log off;</code>
<code> </code><code>root /opt/lampp/htdocs/web;</code>
<code> </code><code>expires </code><code>600</code><code>;</code>
文件反盗链并设置过期时间
这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
“rewrite ^/ http://leech.divmy.com/leech.gif;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存
<code>location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {</code>
<code> </code><code>valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost </code><code>208.97</code><code>.</code><code>167.194</code><code>;</code>
<code> </code><code>if</code> <code>($invalid_referer) {</code>
<code> </code><code>rewrite ^/ http:</code><code>//leech.divmy.com/leech.gif;</code>
<code> </code><code>return</code> <code>412</code><code>;</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>expires 3d;</code>
只充许固定ip访问网站,并加上密码
<code>root /opt/htdocs/www;</code>
<code> </code><code>allow </code><code>208.97</code><code>.</code><code>167.194</code><code>;</code>
<code> </code><code>allow </code><code>222.33</code><code>.</code><code>1.2</code><code>;</code>
<code> </code><code>allow </code><code>231.152</code><code>.</code><code>49.4</code><code>;</code>
<code> </code><code>deny all;</code>
<code> </code><code>auth_basic “C1G_ADMIN”;</code>
<code> </code><code>auth_basic_user_file htpasswd;</code>
将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.html
<code>rewrite ^/job-([</code><code>0</code><code>-</code><code>9</code><code>]+)-([</code><code>0</code><code>-</code><code>9</code><code>]+)-([</code><code>0</code><code>-</code><code>9</code><code>]+)\.html$ /job/$</code><code>1</code><code>/$</code><code>2</code><code>/jobshow_$</code><code>3</code><code>.html last;</code>
将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/
<code>rewrite ^/([</code><code>0</code><code>-9a-z]+)job/(.*)$ /area/$</code><code>1</code><code>/$</code><code>2</code> <code>last;</code>
上面例子有个问题是访问/shanghai 时将不会匹配
<code>rewrite ^/([</code><code>0</code><code>-9a-z]+)job$ /area/$</code><code>1</code><code>/ last;</code>
这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
知道原因后就好办了,让我手动跳转吧
<code>rewrite ^/([</code><code>0</code><code>-9a-z]+)job$ /$1job/ permanent;</code>
文件和目录不存在的时候重定向:
<code>if</code> <code>(!-e $request_filename) {</code>
<code> </code><code>proxy_pass http:</code><code>//127.0.0.1;</code>
域名跳转
<code>server</code>
<code>{</code>
<code>listen </code><code>80</code><code>;</code>
<code>server_name jump.88dgw.com;</code>
<code>index index.html index.htm index.php;</code>
<code>root /opt/lampp/htdocs/www;</code>
<code>rewrite ^/ http:</code><code>//www.88dgw.com/;</code>
<code>access_log off;</code>
多域名转向
<code>server_name www.7oom.com/ www.divmy.com/;</code>
<code>root /opt/lampp/htdocs;</code>
<code>if</code> <code>($host ~ “c1gstudio\.net”) {</code>
<code> </code><code>rewrite ^(.*) http:</code><code>//www.7oom.com$1/ permanent;</code>
三级域名跳转
<code>if</code> <code>($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {</code>
<code> </code><code>rewrite ^(.*) http:</code><code>//top.88dgw.com$1/;</code>
域名镜向
<code>server_name mirror.c1gstudio.com;</code>
<code>rewrite ^/(.*) http:</code><code>//www.divmy.com/$1 last;</code>
某个子目录作镜向
<code>location ^~ /zhaopinhui {</code>
<code>rewrite ^.+ http:</code><code>//zph.divmy.com/ last;</code>
<code>break</code><code>;</code>
discuz ucenter home (uchome) rewrite
<code>rewrite ^/(space|network)-(.+)\.html$ /$</code><code>1</code><code>.php?rewrite=$</code><code>2</code> <code>last;</code>
<code>rewrite ^/(space|network)\.html$ /$</code><code>1</code><code>.php last;</code>
<code>rewrite ^/([</code><code>0</code><code>-</code><code>9</code><code>]+)$ /space.php?uid=$</code><code>1</code> <code>last;</code>
discuz 7 rewrite
<code>rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $</code><code>1</code><code>/archiver/index.php?$</code><code>2</code> <code>last;</code>
<code>rewrite ^(.*)/forum-([</code><code>0</code><code>-</code><code>9</code><code>]+)-([</code><code>0</code><code>-</code><code>9</code><code>]+)\.html$ $</code><code>1</code><code>/forumdisplay.php?fid=$</code><code>2</code><code>&page=$</code><code>3</code> <code>last;</code>
<code>rewrite ^(.*)/thread-([</code><code>0</code><code>-</code><code>9</code><code>]+)-([</code><code>0</code><code>-</code><code>9</code><code>]+)-([</code><code>0</code><code>-</code><code>9</code><code>]+)\.html$ $</code><code>1</code><code>/viewthread.php?tid=$</code><code>2</code><code>&extra=page\%3D$</code><code>4</code><code>&page=$</code><code>3</code> <code>last;</code>
<code>rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $</code><code>1</code><code>/viewpro.php?$</code><code>2</code><code>=$</code><code>3</code> <code>last;</code>
<code>rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $</code><code>1</code><code>/space.php?$</code><code>2</code><code>=$</code><code>3</code> <code>last;</code>
<code>rewrite ^(.*)/tag-(.+)\.html$ $</code><code>1</code><code>/tag.php?name=$</code><code>2</code> <code>last;</code>
给discuz某版块单独配置域名
<code>server_name bbs.c1gstudio.com news.c1gstudio.com;</code>
<code>location = / {</code>
<code>if</code> <code>($http_host ~ news\.divmy.com$) {</code>
<code> </code><code>rewrite ^.+ http:</code><code>//news.divmy.com/forum-831-1.html last;</code>
discuz ucenter 头像 rewrite 优化
<code>location ^~ /ucenter {</code>
<code>location ~ .*\.php?$</code>
<code>#fastcgi_pass unix:/tmp/php-cgi.sock;</code>
<code>fastcgi_pass </code><code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>9000</code><code>;</code>
<code>fastcgi_index index.php;</code>
<code>include</code> <code>fcgi.conf;</code>
<code>location /ucenter/data/avatar {</code>
<code>log_not_found off;</code>
<code>access_log off;</code>
<code>location ~ /(.*)_big\.jpg$ {</code>
<code> </code><code>error_page </code><code>404</code> <code>/ucenter/images/noavatar_big.gif;</code>
<code>location ~ /(.*)_middle\.jpg$ {</code>
<code> </code><code>error_page </code><code>404</code> <code>/ucenter/images/noavatar_middle.gif;</code>
<code>location ~ /(.*)_small\.jpg$ {</code>
<code> </code><code>error_page </code><code>404</code> <code>/ucenter/images/noavatar_small.gif;</code>
<code>expires </code><code>300</code><code>;</code>
jspace rewrite
<code>location ~* ^/index.php/</code>
<code>rewrite ^/index.php/(.*) /index.php?$</code><code>1</code> <code>break</code><code>;</code>
另外这里还有一个工具可以直接把apache规则转化为nginx规则
<a href="http://www.anilcetin.com/convert-apache-htaccess-to-nginx/" target="_blank">http://www.anilcetin.com/convert-apache-htaccess-to-nginx/</a>
参考:
http://wiki.nginx.org/NginxChsHttpRewriteModule
<a href="http://blog.csdn.net/cnbird2008/archive/2009/08/04/4409620.aspx" target="_blank">http://blog.csdn.net/cnbird2008/archive/2009/08/04/4409620.aspx</a>
http://www.divmy.com/
本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1585114如需转载请自行联系原作者
qianghong000