浅谈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
php 分页函数multi() discuz
Jun 21 PHP
php邮件发送,php发送邮件的类
Mar 24 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PDO::setAttribute讲解
Jan 29 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 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中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php常用表单验证类用法实例
2015/06/18 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
js中日期的加减法
2015/05/06 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
antd Upload 文件上传的示例代码
2018/12/14 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python中apply函数的用法实例教程
2014/07/31 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
python实现自动登录
2018/09/17 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
python logging通过json文件配置的步骤
2020/04/27 Python
python里glob模块知识点总结
2021/01/05 Python
网吧消防安全制度
2014/01/28 职场文书
通信研究生自荐信
2014/02/01 职场文书
老同学聚会感言
2014/02/23 职场文书
化妆品促销方案
2014/02/24 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
高中生毕业评语
2014/12/30 职场文书
合作合同协议书范本
2015/01/27 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
MySQL优化及索引解析
2022/03/17 MySQL