浅谈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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
PHP 已经成熟
Dec 04 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP开发Apache服务器配置
Jul 15 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
详解PHP发送邮件知识点
May 06 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学习之字符串比较和查找
2011/04/17 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Python中Random和Math模块学习笔记
2015/05/18 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
预备党员公开承诺书
2014/05/28 职场文书
红色旅游心得体会
2014/09/03 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
城南旧事读书笔记
2015/06/29 职场文书