浅谈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 相关文章推荐
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
深入解析php之sphinx
May 15 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
详解thinkphp的Auth类认证
May 28 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
ThinkPHP路由详解
2015/07/27 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python 闭包的使用方法
2017/09/07 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
教师实习自我鉴定
2013/12/11 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
意向书范文
2014/03/31 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
后进生评语大全
2015/01/04 职场文书
看雷锋电影观后感
2015/06/10 职场文书