<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[Nginx的Rewrite重写规则]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 13 May 2010 02:10:36 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	Nginx Rewrite规则相关指令<br/><div class="code"><br/><br/>Nginx Rewrite规则相关指令有if、rewrite、set、return、break等，其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下：<br/><br/>rewrite ^/b/(.*)&#92;.html /play.php?video=$1 break;<br/><br/><br/>如果加上if语句，示例如下：<br/><br/>if (!-f $request_filename)<br/><br/>&#123;<br/><br/>rewrite ^/img/(.*)$ /site/$host/images/$1 last;<br/><br/>&#125;<br/><br/><br/><br/></div><br/><br/>Nginx与Apache的Rewrite规则实例对比 <br/><br/><div class="code"><br/><br/>简单的Nginx和Apache 重写规则区别不大，基本上能够完全兼容。例如：<br/><br/>Apache Rewrite 规则：<br/><br/>RewriteRule ^/(mianshi&#124;xianjing)/$ /zl/index.php?name=$1 &#91;L&#93;<br/><br/>RewriteRule ^/ceshi/$ /zl/ceshi.php &#91;L&#93;<br/><br/>RewriteRule ^/(mianshi)_(&#91;a-zA-Z&#93;+)/$ /zl/index.php?name=$1_$2 &#91;L&#93;<br/><br/>RewriteRule ^/pingce(&#91;0-9&#93;*)/$ /zl/pingce.php?id=$1 &#91;L&#93;<br/><br/><br/>Nginx Rewrite 规则：<br/><br/>rewrite ^/(mianshi&#124;xianjing)/$ /zl/index.php?name=$1 last;<br/><br/>rewrite ^/ceshi/$ /zl/ceshi.php last;<br/><br/>rewrite ^/(mianshi)_(&#91;a-zA-Z&#93;+)/$ /zl/index.php?name=$1_$2 last;<br/><br/>rewrite ^/pingce(&#91;0-9&#93;*)/$ /zl/pingce.php?id=$1 last;<br/><br/><br/>由以上示例可以看出，Apache的Rewrite规则改为Nginx的Rewrite规则，其实很简单：Apache的RewriteRule指令换成Nginx的rewrite指令，Apache的&#91;L&#93;标记换成Nginx的last标记，中间的内容不变。<br/><br/><br/>如果Apache的Rewrite规则改为Nginx的Rewrite规则后，使用nginx -t命令检查发现nginx.conf配置文件有语法错误，那么可以尝试给条件加上引号。例如一下的Nginx Rewrite规则会报语法错误：<br/><br/>rewrite&nbsp;&nbsp;^/(&#91;0-9&#93;&#123;5&#125;).html$ /x.jsp?id=$1&nbsp;&nbsp;last;<br/><br/>加上引号就正确了：<br/>rewrite&nbsp;&nbsp;“^/(&#91;0-9&#93;&#123;5&#125;).html$” /x.jsp?id=$1&nbsp;&nbsp;last;<br/><br/>Apache与Nginx的Rewrite规则在URL跳转时有细微的区别：<br/><br/>Apache Rewrite 规则：<br/>RewriteRule&nbsp;&nbsp;^/html/tagindex/(&#91;a-zA-Z&#93;+)/.*$ /$1/ &#91;R=301,L&#93;<br/><br/>Nginx Rewrite 规则：<br/>rewrite&nbsp;&nbsp;^/html/tagindex/(&#91;a-zA-Z&#93;+)/.*$ http://$host/$1/&nbsp;&nbsp;permanent;<br/><br/>以上示例中，我们注意到，Nginx Rewrite 规则的置换串中增加了“http://$host”，这是在Nginx中要求的。<br/><br/>另外，Apache与Nginx的Rewrite规则在变量名称方面也有区别，例如：<br/><br/>Apache Rewrite 规则：<br/>RewriteRule&nbsp;&nbsp;^/user/login/$ /user/login.php?login=1&amp;forward=http://%&#123;HTTP_HOST&#125;&nbsp;&nbsp;&#91;L&#93;<br/><br/>Nginx Rewrite 规则：<br/>rewrite&nbsp;&nbsp;^/user/login/$ /user/login.php?login=1&amp;forward=http://$host&nbsp;&nbsp; last;<br/><br/>Apache与Nginx Rewrite 规则的一些功能相同或类似的指令、标记对应关系：<br/><br/>Apache的RewriteCond指令对应Nginx的if指令；<br/>Apache的RewriteRule指令对应Nginx的rewrite指令；<br/>Apache的&#91;R&#93;标记对应Nginx的redirect标记；<br/>Apache的&#91;P&#93;标记对应Nginx的last标记；<br/>Apache的&#91;R,L&#93;标记对应Nginx的redirect标记；<br/>Apache的&#91;P,L&#93;标记对应Nginx的last标记；<br/>Apache的&#91;PT,L&#93;标记对应Nginx的last标记；<br/><br/>允许指定的域名访问本站，其他域名一律跳转到http://www.aaa.com<br/><br/>Apache Rewrite 规则：<br/>RewriteCond %&#123;HTTP_HOST&#125;&nbsp;&nbsp;&nbsp;&nbsp;^(.*?)&#92;.domain&#92;.com$<br/>RewriteCond %&#123;HTTP_HOST&#125;&nbsp;&nbsp;&nbsp;&nbsp;!^qita&#92;.domain&#92;.com$<br/>RewriteCond %&#123;DOCUMENT_ROOT&#125;/market/%1/index.htm -f<br/>RewriteRule ^/wu/$ /market/%1/index.htm &#91;L&#93;<br/><br/>Nginx的if指令不支持嵌套，也不支持AND、OR等多条件匹配，相比于Apache的RewriteCond，显得麻烦一些，但是，我们可以通过下一页的Nginx配置写法来实现这个示例：<br/><br/>Nginx Rewrite 规则：<br/>if ($host ~* ^(.*?)&#92;.domain&#92;.com$)<br/>&#123;<br/>set $var_wupin_city $1;<br/>set $var_wupin ‘1′;<br/>&#125;<br/>if ($host ~* ^qita&#92;.domain&#92;.com$)<br/>&#123;<br/>set $var_wupin ‘0′;<br/>&#125;<br/>if (!-f $document_root/market/$var_wupin_city/index.htm)<br/>&#123;<br/>set $var_wupin ‘0′;<br/>&#125;<br/>if ($var_wupin ~ ‘1′)<br/>&#123;<br/>rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;<br/>&#125;<br/><br/><br/><br/></div><br/>apache重写规则转换成nginx重写规则网址：<br/><a href="http://www.anilcetin.com/convert-apache-htaccess-to-nginx/" target="_blank">http://www.anilcetin.com/convert-apache-htaccess-to-nginx/</a><br/><br/>Tags - <a href="http://www.dzhope.com/tags/nginx%25E9%2587%258D%25E5%2586%2599%25E8%25A7%2584%25E5%2588%2599/" rel="tag">nginx重写规则</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] Nginx的Rewrite重写规则]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>