浅谈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执行速度全攻略(下)
Oct 09 PHP
对javascript和select部件的结合运用
Oct 09 PHP
需要发散思维学习PHP
Jun 29 PHP
PHP操作xml代码
Jun 17 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 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
php中{}大括号是什么意思
2013/12/01 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
Angularjs单选框相关的示例代码
2017/08/17 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
在Python的Django框架中加载模版的方法
2015/07/16 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
python命令行工具Click快速掌握
2019/07/04 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python的数学算法函数及公式用法
2020/11/18 Python
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
红色故事演讲稿
2014/05/22 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
会计试用期自我评价
2015/03/10 职场文书
西游降魔篇观后感
2015/06/15 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js