網(wǎng)站301重定向代碼死循環(huán)問(wèn)題
說(shuō)起網(wǎng)站的301重定向,你一定也了解過(guò)它的作用吧,大家都知道在mod_rewrite模式下是可以新建.htaccess文件來(lái)做的,如以下為一個(gè)不帶WWW的studstu.com重定向到www.studstu.com的例子代碼:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^studstu.com [NC]
RewriteRule ^(.*)$ http://www.studstu.com/$1 [L,R=301]
但很多主機(jī)用的是WIN系統(tǒng)的,而且還是虛擬主機(jī),無(wú)法設(shè)置IIS來(lái)做301重定向,那么則多用代碼來(lái)實(shí)現(xiàn),比如網(wǎng)上很多的ASP、PHP、.NET等301重定向代碼。
ASP代碼:
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.studstu.com"
Response.End
%>
PHP代碼:
<? Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.studstu.com" );?>
上面這種代碼只適用于網(wǎng)站域名更換的情況下,即不同的域名和不同的空間根目錄,把上面代碼放置于舊站網(wǎng)站文件的頂部即可,這時(shí)訪問(wèn)舊站時(shí)就會(huì)重定向到新站www.studstu.com。如果網(wǎng)站是屬于一個(gè)網(wǎng)站空間綁定2個(gè)域名,2個(gè)域名的根目錄為同一個(gè)時(shí),那么就會(huì)出現(xiàn)死循環(huán)了。
如果是一個(gè)網(wǎng)站綁定多個(gè)域名情況,將不帶WWW的子域名或其他域名重定向到一個(gè)主域名,那么只需要加個(gè)判斷:
ASP重定向代碼:
<%
if request.ServerVariables("HTTP_HOST")="studstu.com" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.studstu.com"
Response.End
end if
%>
PHP重定向代碼:
<?php
$the_host = $_SERVER['HTTP_HOST'];//取得進(jìn)入所輸入的域名
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判斷地址后面部分
if($the_host !== 'studstu.com')//舊域名或子域名地址
{
header('HTTP/1.1 301 Moved Permanently');//發(fā)出301頭部
header('Location: http://www.studstu.com'.$request_uri);//跳轉(zhuǎn)到我的新域名地址
}
?>
這時(shí)訪問(wèn)studstu.com就會(huì)301重定向到www.studstu.com了。