301转向代码-带判断可用于同一目录
301转向代码-带判断可用于同一目录。 之前网络上的301重定向代码都是直接转向,这样的话就需要把域名解析到不同的主机上。然后再把不带WWW的域名主机上然后做301转向到www主机上。这样就需要两个主机,成本和费用比较高。如果指向同一主机的话会造成301转向死循环。
要解决这个问题,其实可以在301转向前加一个判断。如果不带WWW的REQUEST转到WWW,带WWW的则不做处理。
<% if request.ServerVariables("HTTP_HOST")="jpesun.com" then Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.jpesun.com/" Response.End end if %>
如果是.net程序的话,可以做在首页的Page_Load,或者Global.asax里有个"Application_BeginRequest" 事件中做转向。
if (!Request.Url.Host.ToLower().Contains("www { Response.Clear(); Response.StatusCode = 301; Response.Status = "301 Moved Permanently"; Response.AddHeader("Location", "http://www." + Request.Url.Host + Request.Url.PathAndQuery.ToLower().Replace("/index.aspx","")); Response.End(); }
2016.02更新php
<?php $the_host = $_SERVER['HTTP_HOST']; $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; if($the_host !== 'dieep.com') { header('HTTP/1.1 301 Moved Permanently'); header('Location: http://www.dieep.com' . $_SERVER['PHP_SELF'] . $request_uri); } ?>