浅谈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 array_flip() 删除数组重复元素
Jan 14 PHP
PHP Pear 安装及使用
Mar 19 PHP
有关php运算符的知识大全
Nov 03 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php常用数学函数汇总
Nov 21 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
php实现自动生成验证码的实例讲解
Nov 17 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
基于mysql的论坛(2)
2006/10/09 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
php无限级分类实现方法分析
2016/10/19 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
使用angular写一个hello world
2015/01/23 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
探究Python中isalnum()方法的使用
2015/05/18 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
批评与自我批评材料
2014/02/15 职场文书
银行进社区活动总结
2014/07/07 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
写给女朋友的保证书
2015/05/09 职场文书
红白喜事主持词
2015/07/06 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
交通安全教育心得体会
2016/01/15 职场文书
Golang数据类型和相互转换
2022/04/12 Golang