您当前的位置:首页 > 分类 > 技术资讯 > PHP > 正文

PHP平台在Nginx下的Rewrite规则

发布时间:2013-05-25 21:10:25      来源:51推一把
【摘要】首先解释Nginx的Rewrite规则:Rewrite其实就是跳转(URL重定向)详细规则请查阅Nginx官方维基http://wiki.nginx.org/NginxHttpRewriteModule格式: rewrite regex replacement flag; #rewrite是关键词,表示做跳转,regex为正则表达式的判断...
首先解释Nginx的Rewrite规则:
Rewrite其实就是跳转(URL重定向)
详细规则请查阅Nginx官方维基http://wiki.nginx.org/NginxHttpRewriteModule
格式: rewrite regex replacement flag;
#rewrite是关键词,表示做跳转,
regex为正则表达式的判断,
replacement为跳转(重定向)目的地,
flag分为以下几种:
last – 基本上都用这个Flag(也是默认值),重定向之后浏览器上显示的该网页URL不会更改。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302,重定向之后浏览器上显示的该网页URL会更改。
permanent – 返回永久重定向的HTTP状态301,重定向之后浏览器上显示的该网页URL会更改。
关于regex的正则表达式请查阅相关资料,例http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
简单说 ^表示以某个字符串开始,$表示以某个字符串为结束,[a-zA-Z0-9]表示匹配集内的字符,a+表示至少含有一个a字符,[0-9]+表示含有至少一个0~9集合内的字符,(.+)表任意。
举例:(请将该Rewrite规则写于Nginx的配置文件server段或者location段中)
eg: rewrite ^/about$ /action-channel-name-about.html permanent;
#匹配URL请求只为/about,并301跳转到/action-channel-name-about.html
rewrite ^/album
http://picasaweb.google.com/littlehz redirect;
#匹配URL请求为/album开始,后面可含有任意字符串,302跳转到
http://picasaweb.google.com/littlehz页面

下面列举一些常见的PHP平台的rewrite规则,首先请在该PHP程序中设置永久链接URL为rewrite模式。
###以下为Wordpress 2.7的Nginx伪静态化rewrite规则
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
#这里做了几个判断,先判断请求的文件是否存在,如果不存在,才把任意字符rewrite至wordpress的逻辑index.php处理
###以下为安装有WP Super Cache插件的Wordpress的Nginx伪静态化rewrite规则
#Super Cache插件是Wordpress的缓存插件,这里的rewrite就是主要判断缓存是否存在,如果存在,跳转缓存文件,如果没有缓存,才让wordpress 的index.php来做URL处理。
if (-f $request_filename) { break;}
set $supercache_file ;
set $supercache_uri $request_uri;
if ($request_method = POST) {set $supercache_uri ;}
if ($query_string) {set $supercache_uri ;}
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { set $supercache_uri ; }
if ($supercache_uri ~ ^(.+)$) { set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html; }
if (-f $document_root$supercache_file) { rewrite ^(.*)$ $supercache_file break; }
if (!-e $request_filename) { rewrite . /index.php last;}
###以下为Discuz! 7.0 的Nginx伪静态化rewrite规则
rewrite ^(.*)/archiver/((fid|tid)-[w-]+.html)$ $1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^(.*)/profile-(username|uid)-(.+).html$ $1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+).html$ $1/space.php?$2=$3 last;
rewrite ^(.*)/tag-(.+).html$ $1/tag.php?name=$2 last;
###以下为SupeSite 7.0 的Nginx伪静态化rewrite规则
rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2 last;
rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2 last;
rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2 last;
rewrite ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2 last;
rewrite ^/([0-9]+)$ /index.php?uid/$1 last;
rewrite ^/action(.+)$ /index.php?action$1 last;
rewrite ^/category(.+)$ /index.php?action/category/catid$1 last;
rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1 last;
rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid$1 last;
rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid$1 last;
###以下为PHPCMS 2008 的Nginx伪静态化rewrite规则
rewrite ^(.*)show-([0-9]+)-([0-9]+).html$ $1/show.php?itemid=$2&page=$3;
rewrite ^(.*)list-([0-9]+)-([0-9]+).html$ $1/list.php?catid=$2&page=$3;
rewrite ^(.*)show-([0-9]+).html$ $1/show.php?specialid=$2;
####以下为PHPWind 7.3的Nginx伪静态化rewrite规则
rewrite ^(.*)-htm-(.*)$ $1.php?$2 last;
rewrite ^(.*)/simple/([a-z0-9_]+.html)$ $1/simple/index.php?$2 last;