申明:本连载的文章来自:Nginx官网、张 宴BLOG、linuxtone论坛、互联网、本人原创.并尽力在官网文档的基础发表原创作品.并保证文档的质量与错误率.如有作者认为本文有涉及版权问 题请与我联系:
liuyu105#gmail.com.
Nginx Rewirte
1. 基本标记、正则、文件与目录
A、基本标记
last - 基本上都用这个Flag.
※相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则
break - 中止Rewirte,不再继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
B、 正则
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配
C、 文件及目录匹配
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
2. Discuz/ joomla/drupal
A、 discuz 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=$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;
B、 joomla rewrite
- location / {
- expires 30d;
- error_page 404 = @joomla;
- log_not_found off;
- }
-
- location @joomla {
- rewrite ^(.*)$ /index.php?q=$1 last;
- }
C、 drupal rewirte
- if (!-f $request_filename) {
- rewrite ^(.*)$ /index.php?q=$1 last;
- break;
- }
-
- if (!-d $request_filename) {
- rewrite ^(.*)$ /index.php?q=$1 last;
- break;
- }
4、 Wordpress/ typecho等博客系统写法
A、wordpress 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;
- }
B、typecho rewrite
- location / {
- index index.html index.php;
- 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;
- }
- }
参考:http://wiki.nginx.org/NginxConfiguration