http://www.jefflei.com/post/1015.html

Nginx的重定向用到了Nginx的HttpRewriteModule,下面简单解释以下如何使用的方法:

rewrite命令

nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下:
rewrite 正则表达式 替换目标 flag标记
flag标记可以用以下几种格式:
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:
location /download/ {
rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.gz break;
}

nginx重定向的IF条件判断

在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种:
正则表达式

如:
匹配判断

~ 为区分大小写匹配; !~为区分大小写不匹配
~* 为不区分大小写匹配;!~为不区分大小写不匹配

就是当用户输入 www.a.com.cn 自动跳转到www.a.com 这个域名:

rewrite ^/(.*)$ http://www.a.com/$1 permanent; 或者cname
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}

文件和目录判断
-f和!-f判断是否存在文件
-d和!-d判断是否存在目录
-e和!-e判断是否存在文件或目录
-x和!-x判断文件是否可执行
例如下面设定nginx在文件和目录不存在的时候重定向:
if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}

return

返回http代码,例如设置nginx防盗链
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com www.leizhenfang.com;
if ($invalid_referer) {
return 404;
}
}

set

设置nginx变量

 

永久重定向:

nginx

http://vcoole.blogbus.com/logs/36477149.html

 

server {
server_name www.chinarenservice.com www.vcoole.com ;
if ($host != 'www.chinarenservice.com' ) {
rewrite ^/(.*)$ http://www.vcoole.com/$1 permanent;
}
...
}
第二种方法:
server {
server_name blog.vcoole.com vcoole.com;
rewrite ^/(.*) http://www.vcoole.com/$1 permanent;
}

我用的是第一种方法,这两种方法中, permanent是关键,详细说明见nginx配置规则说明

last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301

301 Redirect 资源永久重定向的实现方法

PHP Redirect 301 重定向方法

<?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.openiwom.com" );
?>

ASP Redirect 301 重定向方法

<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.openiwom.com/"
%>

ASP .Net Redirect 301 重定向方法

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.openiwom.com");
}
</script>

JSP (Java) Redirect 301 重定向方法

<%
response.setStatus(301);
response.setHeader( "Location", "http://www.openiwom.com/" );
response.setHeader( "Connection", "close" );
%>

CGI Perl Redirect 301 重定向方法

$q = new CGI;
print $q->redirect("http://www.openiwom.com/");

Apache 301 重定向设置

Apache 开启了 Rewrite 模块后,可以在 .htaccess 文件中定义规则,很方便的进行 301 重定向。

编辑 Apache 配置文件 httpd.conf,将下面这行前面的 # 号去掉,重启 Apache。

#LoadModule rewrite_module modules/mod_rewrite.so

 

由于需要更改一个网站的目录名,需要用到永久重定向,更改.htaccess文件,记录如下:

RewriteEngine On
RewriteBase /aaa
RewriteRule ^show-([0-9]+)\.htm$ /bbb/$1/ [R=301,L]

解释:RewriteEngine On为开启rewrite功能,rewritebase /aaa是原来的目录
/bbb是后来转向的目录,R=301表示是永久转移,L表示rewrite结束。
若R=302则表示临时性转移,据说301重定向是网页更改地址后对搜索引擎友好的最好方法。

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ http://www.suxi.org/blog/$1 [R=301,L]

// 上面代码为全站重定向到blog目录下,(新旧目录结构和文件名保持一样)

 

IIS 301 重定向设置

* 打开 Internet 信息服务管理器,在需要重定向的网页或目录上按右键
* 选择“重定向到URL”
* 在输入框中输入目标页面的地址
* 选中“资源的永久重定向”
* 点击“应用”

IIS 可以使用 Rewrite 组件实现 301 Redirect 资源永久重定向,组件下载及配置方法请参考欧派文档“IIS Rewrite 组件下载与配置方法”:http://www.openiwom.com/Documents/IIS-Rewrite.html

http://www.suxi.org/blog/2009/02/rewrite301.html

http://www.openiwom.com/Documents/301-Redirect.html

posted on 2011-01-07 15:51  Dufe王彬  阅读(1125)  评论(0编辑  收藏  举报