浅谈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 相关文章推荐
Zend Guard一些常见问题解答
Sep 11 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
关于PHP5 Session生命周期介绍
Mar 02 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
PHP 类相关函数的使用详解
May 10 PHP
基于header的一些常用指令详解
Jun 06 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
PHP Reflection API详解
May 12 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
Laravel如何使用Redis共享Session
Feb 23 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
19个Android常用工具类汇总
2014/12/30 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
js日期联动示例
2014/05/02 Javascript
Angularjs 基础入门
2014/12/26 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
python socket 超时设置 errno 10054
2014/07/01 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
Python定义函数实现累计求和操作
2020/05/03 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
仓管岗位职责范本
2014/02/08 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
实习报告范文
2019/07/30 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server