Total Pageviews

Monday 22 October 2012

301重定向代码合集

301重定向是服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。页面永久性移走301重定向主要是将需要转移的网址重定向另一个新的网址上,并且是永久性转移。

1、IIS下301设置
Internet信息服务管理器 -> 虚拟目录 -> 重定向到URL,输入需要转向的目标URL,并选择“资源的永久重定向”。

2、ASP下的301转向代码

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

3、ASP.Net下的301转向代码

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

4、PHP下的301转向代码

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.urdomain.com");
exit();

5、CGI Perl下的301转向代码

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

6、JSP下的301转向代码

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

7、Apache下301转向代码
新建.htaccess文件,输入下列内容(需要开启mod_rewrite):
1)将不带www的域名转向到带www的域名下(或反之)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^
urdomain.com [NC]
RewriteRule ^(.*)$ http://www.urdomain.com/$1 [L,R=301]  


当然urdomain.com和www.urdomain.com要指向同一个ip。
还需要修改apache的配置文件的virtualhost部分

<VirtualHost ur-vps-ip:80>
ServerName
www.urdomain.com
ServerAlias
urdomain.com 
DocumentRoot /path/to/ur-document-root/
</VirtualHost>



2)重定向到新域名

RewriteEngine on
RewriteRule ^(.*)$ http://www.urdomain.com/$1 [L,R=301] 或者:

 RewriteEngine on
RewriteCond %{HTTP_HOST} ^
urdomain1.com [NC]
RewriteRule ^(.*)$ http://urdomain2.com/$1 [L,R=301]  


当然urdomain1.com要指向到urdomain2.com所指向的同一个ip.还需要修改apache的配置文件的virtualhost部分

<VirtualHost ur-vps-ip:80>
ServerName
urdomain2.com
ServerAlias
urdomain1.com 
DocumentRoot /path/to/ur-document-root/
</VirtualHost>




3)使用正则进行301转向,实现伪静态

RewriteEngine on
RewriteRule ^news-(.+)\.html$ news.php?id=$1

将news.php?id=123这样的地址转向到news-123.html

8、Apache下vhosts.conf中配置301转向
将不带WWW的域名转向到带WWW域名,vhosts.conf中配置为:

ServerName www.roejy.me
DocumentRoot /home/rojey.me

ServerName roejy.me
RedirectMatch permanent ^/(.*) http://www.urdomain.com/$1

9、Nginx下的301转向代码,
不带www的域名跳转到www域名,在nginx.conf中添加:

if ($host != 'www.urdomain.com' ) {
rewrite ^/(.*)$ http://www.urdomain.com/$1 permanent;
}


(^后的/可以不打) 


 301转向情况在线测试

http://tool.chinaz.com/pagestatus/

返回状态码为:301则说明转向成功。

例如:网页返回HEAD信息:

Location: http://xxp520.cn/web/

则说明网址已被转向到:http://xxp520.cn/web/。

301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,等等.
--------------------------------------------------------------------

htaccess rewrite重写规则实例


 htaccess rewrite重写功能是通过Apache mod_rewrite模块来实现的,的确功能强大,强大到有时候自己可能连一个功能都难实现,尤其是在很多虚拟主机上,很难说一次成功,手到病除,即使是本地测试OK的上传后也总要调试几次才能通过。本文汇总一些常用的重写规则.
注:.htaccess文件生成方法,在windows平台上可以通过FTP软件或cmd命令进行命名,修改可以使用记事本或写字板,Linux平台则可以直接命名。如果本机系统与FTP服务器端操作系统不同,如果出现上传后无效,一般定位检查顺序:调整FTP传输模式、检查文件名是否正确、检查是否开放mod_rewrite....,本来可以通过$res= apache_get_modules(); if(in_array('mod_rewrite', $res)) {echo 'OK';}来判断的,不过,该函数经常被禁用。

终止重写死循环
RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html|error/).* [NC]
RewriteRule .* - [L]

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

缓存友好文件名
这个是原作者的最爱,一般是面向JS和CSS等缓冲文件处理,通过设置不同的名字(比如版本或数字编号)来达到让用户更新(定期)缓存的目的。然后 在服务器端,很可能始终就是同一个文件。下面的例子似乎重写 /zap/j/anything-(任意数字).js有关的所有文件,重写为/zap/j/anything.js,CSS处理也类似,把/zap/c /anything-(任意数字).css重写为/zap/c/anything.css。
RewriteRule ^zap/(j|c)/([a-z]+)-([0-9]+)\.(js|css)$ /zap/$1/$2.$4 [L]

为无FLASH浏览器设置SEO友好链接
如果用户的浏览器不支持FLASH,可能需要进行友好提醒,那么以下的rewrite重写规则可以让我们少些很多代码。使用时只需要调用自己的域名加上地址调用就可以了。
RewriteRule ^getflash/?$ http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash [NC,L,R=307]

移除查询Query string字符串
以下的重写规则会让你少很多SEO上的重复内容,比如page.html和page.html?anything=anything文件,简单的方法就是通过重定向这些带query string的外部请求到没有query string目标地址。
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.urdomain.com%{REQUEST_URI}? [R=301,L]

发送请求给PHP脚本
这个.htaccess rewrite示例对pdf-script.php处理Adobe pdf请求文件完全隐匿。
RewriteRule ^(.+)\.pdf$ /cgi-bin/pdf-script.php?file=$1.pdf [L,NC,QSA]

设置客户端的语言变量
对支持多语言显示的网页,可以看一下下面的重写。
RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]
RewriteRule ^(.*)$ - [env=prefer-language:%1]

只支持PHP fopen访问,其它一概拒绝
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^.+$ [NC]
RewriteRule .* - [F,L]

除php fopen可以访问某个子文件夹,其它一概拒绝
下面的示例可以让你的服务器媒体文件或特殊下载文件只能通过PHP代理脚本下载。
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/.*\ HTTP [NC]
RewriteRule .* - [F,L]

检查Query string关键字
下面的示例是检查QUERY_STRING是否包含passkey,否则将跳到登录脚本去。
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !passkey
RewriteRule ^/logged-in/(.*)$ /login.php [L]

去除URL中的QUERY_STRING
以下示例去除所有的QUERY_STRING,包括在问好后面跟个空格,都将被mod_rewrite先去除,然后再重定向。
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]

修复无限循环
由于潜在的配置错误引起的内部重定向请求超过10次就会有一个条错误消息,如果需要增加次数,可以使用LimitInternalRecursion。还可以使用LogLevel debug进行后向跟踪。
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

重定向PHP文件到HTML文件
RewriteRule ^(.*)\.php$ /$1.html [R=301,L]

重定向.html到.php文件
RewriteRule ^(.*)\.html$ $1.php [R=301,L]

规定时间阻止访问某些文件
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

下划线改成连字符
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]

RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://d.com/$1 [R=301,L]

重定向Wordpress Feeds到Feedburner
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/feed\.gif$
RewriteRule .* - [L]

RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

只允许GET和PUT请求
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !^(GET|PUT)
RewriteRule .* - [F]

图像、文件防盗链
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?urdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

停止浏览器预存取
RewriteEngine On
SetEnvIfNoCase X-Forwarded-For .+ proxy=yes
SetEnvIfNoCase X-moz prefetch no_access=yes

# 阻止X-moz头的预存取请求
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]
本文来源于国外文章翻译整理,附原文地址:http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html
----------------------------------------------------

虚拟主机不支持301重定向怎么办? 代码实现301重定向

 不少做站的朋友们使用的虚拟空间无法添加 301重定向,今天本文就来告诉你在不更换空间的情况下,怎么通过其他的方法来实现301重定向。我主要介绍两种方法来实现这个目的:
第一种是软重定向,使用代码进行301重定向
虽然我们无法在虚拟空间中设置301重定向,但是代码还是可以修改的,所以我们可以对index文件进行修改,由于每个程序使用的代码不相同,大家可以自行搜索与自己程序向匹配的301重定向代码,我这边以wordpress博客为例进行讲解,方法大同小异。
将以下这段代码放入到根目录的index.php最开始的地方
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
if(strtolower($the_host) != ‘www.bluefate.org’)//把这里的域名换上你想要的
{ $URIRedirect=$_SERVER['REQUEST_URI']; //获取域名后的参数
if(strtolower($URIRedirect)==”/index.php”)//判断是参数为/index.php就显示为/
{
$URIRedirect=”/”;
}
header(“HTTP/1.1 301 Moved Permanently”);//发出301头部
header(“Location: http://www.baiduzq.com”.$URIRedirect);//跳转到你希望的地址格式
exit();
}
添加这段代码之后,可以将原域名下的所有链接地址定向到对应新域名的地址,即:域名变化,但是参数不变的。这样就巧妙的实现了301重定向,同样达到了向搜索引擎传达友好信息的作用。
第二种是通过DNSPOD来实现301重定向
这个方法是我今天要强烈推荐的,主要是因为这个方法非常的简单,但是效果却是一样可以达到。请看下图
301重定向
在上图中有四个参数,我们需要用到的主要有A、B、D这三个参数。做301重定向,首先就是要把记录类型,即参数B设置为显性URL,剩下的就是补充其他的参数,有这两种情况
第一种情况,把不带WWW的重定向到带WWW的
操作方法:主机记录填写@(@代表主域名),记录值填写你的目标网址比如http://www.123.com,这样就可以把123.com 重定向到www.123.com
第二种情况,把A网址重定向到B网址
操作方法:需要添加两条记录,一条是把带www的A网址的重定向到B网址,主机记录填写www,记录值填写B网址,第二条是把不带WWW的A网址重定向到 B网址,主机记录填写@,记录值填写B网址。通过这两条记录,就可以把不带WWW和带WWW的A网址重定向到B网址了。
这个方法绝大多数人都可以使用,而且不需要空间的支持,希望这篇文章对大家有所帮助。