浅谈apache和nginx的rewrite的区别


Posted in PHP onFebruary 22, 2013

1. Nginx Rewrite规则相关指令

Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下:

rewrite ^/b/(.*)\.html /play.php?video=$1 break;

如果加上if语句,示例如下:
if (!-f $request_filename)

{ rewrite ^/img/(.*)$ /site/$host/images/$1 last;      }

2. Nginx与Apache的Rewrite规则实例对比

    简单的Nginx和Apache 重写规则区别不大,基本上能够完全兼容。

 Apache Rewrite 规则:

RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L]

RewriteRule ^/ceshi/$ /zl/ceshi.php [L]

RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [L] RewriteRule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [L]

Nginx Rewrite 规则:

rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;

rewrite ^/ceshi/$ /zl/ceshi.php last;

rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;

rewrite ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;

 

    不难发现Apache的Rewrite规则改为Nginx的Rewrite规则挺简单的,如果改完规则,使用"nginx -t"命令检查发现nginx.conf配置文件有语法错误,那么可以尝试给条件加上引号。例如一下的Nginx Rewrite规则会报语法错误:

rewrite  ^/([0-9]{5}).html$ /x.jsp?id=$1  last;加上引号就正确了:  

rewrite  “^/([0-9]{5}).html$” /x.jsp?id=$1  last;

 

Apache与Nginx的Rewrite规则在URL跳转时有细微的区别:

Apache Rewrite 规则:
 

RewriteRule  ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301,L]
Nginx Rewrite 规则:

rewrite  ^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/  permanent;

以上示例中,我们注意到,Nginx Rewrite 规则的置换串中增加了“http://$host”,这是在Nginx中要求的。

另外,Apache与Nginx的Rewrite规则在变量名称方面也有区别,例如:
Apache Rewrite 规则:

RewriteRule ^/user/login/$ /user/login.php?login=1&forward=http://%{HTTP_HOST}  [L]

Nginx Rewrite 规则:

rewrite  ^/user/login/$ /user/login.php?login=1&forward=http://$host  last;
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:
 

Apache Rewrite 规则:

RewriteCond %{HTTP_HOST}    ^(.*?)\.domain\.com$

RewriteCond %{HTTP_HOST}    !^qita\.domain\.com$ RewriteCond %{DOCUMENT_ROOT}/market/%1/index.htm -f

RewriteRule ^/wu/$ /market/%1/index.htm [L]

Nginx的if指令不支持嵌套,也不支持AND、OR等多条件匹配,相比于Apache的RewriteCond,显得麻烦一些,但是,我们可以通过下一页的Nginx配置写法来实现这个示例:
    Nginx Rewrite 规则:
 

if ($host ~* ^(.*?)\.domain\.com$)   

{

set $var_wupin_city $1;   

set $var_wupin ‘1′;   

}   

if ($host ~* ^qita\.domain\.com$)

{

set $var_wupin ‘0′;   

}   

if (!-f $document_root/market/$var_wupin_city/index.htm)   

{

set $var_wupin ‘0′;   

}   

if($var_wupin ~ ‘1′)   

{

rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;   

}

PHP 相关文章推荐
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
PHP中echo和print的区别
Aug 28 PHP
php之curl设置超时实例
Nov 03 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
php写入txt乱码的解决方法
Sep 17 PHP
laravel-admin的图片删除实例
Sep 30 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 #PHP
php连接mssql数据库的几种方法
Feb 21 #PHP
PHP递归调用的小技巧讲解
Feb 19 #PHP
PHP递归返回值时出现的问题解决办法
Feb 19 #PHP
PHP递归算法的详细示例分析
Feb 19 #PHP
七款最流行的PHP本地服务器分享
Feb 19 #PHP
浅析PHP递归函数返回值使用方法
Feb 18 #PHP
You might like
PHP4实际应用经验篇(2)
2006/10/09 PHP
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php简单截取字符串代码示例
2016/10/19 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
document.forms[].submit()使用介绍
2014/02/19 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
js微信分享实现代码
2020/10/11 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
详解python调用cmd命令三种方法
2019/07/08 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
python可以用哪些数据库
2020/06/22 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
日语专业推荐信
2013/11/12 职场文书
营销总经理岗位职责
2014/02/02 职场文书
平安校园建设方案
2014/05/02 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
学校师德师风整改方案
2014/10/28 职场文书
护理工作个人总结
2015/03/03 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
解析MySQL binlog
2021/06/11 MySQL
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python