Mercurial > hg > nginx-site
view xml/cn/docs/http/converting_rewrite_rules.xml @ 1017:9f9a427a73eb
Fixed broken links to chinese versions of some modules.
The chinese version contains untranslated copies of english documentation for
random_index and realip modules. The result is the appearance of 'translation
to chinese' link for this modules pointing to non-existing document. This
files are removed.
Also, broken links are generated for the chinese version of the "flv" module,
but the translation exists, although not enabled for publication. Since
contents of file looks like a valid translation, it is allowed to be published.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Mon, 18 Nov 2013 12:48:10 +0400 |
parents | 9934338f83af |
children |
line wrap: on
line source
<!-- Copyright (C) Igor Sysoev Copyright (C) Nginx, Inc. --> <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> <article name="转换rewrite规则" link="/cn/docs/http/converting_rewrite_rules.html" rev="1" lang="cn"> <section name="重定向到主站"> <para> 共享站点的管理员,习惯于<i>只</i>在Apache下使用.htaccess文件配置<i>所有</i>信息,通常会将下面规则 <programlisting> RewriteCond %{HTTP_HOST} example.org RewriteRule (.*) http://www.example.org$1 </programlisting> 翻译成这样: <programlisting> server { listen 80; server_name www.example.org example.org; if ($http_host = example.org) { rewrite (.*) http://www.example.org$1; } ... } </programlisting> </para> <para> 这种做法是错的,复杂而且低效。正确的方式是为<literal>example.org</literal>定义一个单独的服务器: <programlisting> server { listen 80; server_name example.org; return 301 http://www.example.org$request_uri; } server { listen 80; server_name www.example.org; ... } </programlisting> <note> 在0.9.1版本(含)以前,可以这样实现重定向: <programlisting> rewrite ^ http://www.example.org$request_uri?; </programlisting> </note> </para> </section> <section> <para> 再举一个例子,处理一个和刚才相反的逻辑:既不是来自<literal>example.com</literal>,又不是来自<literal>www.example.com</literal>: <programlisting> RewriteCond %{HTTP_HOST} !example.com RewriteCond %{HTTP_HOST} !www.example.com RewriteRule (.*) http://www.example.com$1 </programlisting> 应该按下面这样分开定义<literal>example.com</literal>、<literal>www.example.com</literal>和其他站点: <programlisting> server { listen 80; server_name example.com www.example.com; ... } server { listen 80 default_server; server_name _; return 301 http://example.com$request_uri; } </programlisting> <note> 在0.9.1版本(含)以前,可以这样实现重定向: <programlisting> rewrite ^ http://example.com$request_uri?; </programlisting> </note> </para> </section> <section id="converting_mongrel_rules" name="转化混合规则"> <para> 典型的混合规则如下: <programlisting> DocumentRoot /var/www/myapp.com/current/public RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f RewriteCond %{SCRIPT_FILENAME} !maintenance.html RewriteRule ^.*$ %{DOCUMENT_ROOT}/system/maintenance.html [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ $1 [QSA,L] RewriteCond %{REQUEST_FILENAME}/index.html -f RewriteRule ^(.*)$ $1/index.html [QSA,L] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*)$ $1/index.html [QSA,L] RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L] </programlisting> 转换成nginx配置应该是这样: <programlisting> location / { root /var/www/myapp.com/current/public; try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; } </programlisting> </para> </section> </article>