浅谈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
一个简易需要注册的留言版程序
Oct 09 PHP
配置支持SSI
Nov 25 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
linux下安装php的memcached客户端
Aug 03 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 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设计模式 Visitor 访问者模式
2011/06/28 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
php实现的生成排列算法示例
2019/07/25 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
webpack构建的详细流程探底
2018/01/08 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python3基础之list列表实例解析
2014/08/13 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
python让函数不返回结果的方法
2020/06/22 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
大学生水文观测实习自我鉴定
2013/09/29 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
班组长竞聘书
2014/03/31 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
基于PyQt5制作一个群发邮件工具
2022/04/08 Python