301或302使用PHPredirect
我正在考虑在网站启动阶段使用以下代码,向用户展示维护页面,同时向我展示网站的其他部分。
有没有办法向search引擎显示正确的302redirect状态,还是应该寻找另一种基于.htaccess
的方法?
$visitor = $_SERVER['REMOTE_ADDR']; if (preg_match("/192.168.0.1/",$visitor)) { header('Location: http://www.yoursite.com/thank-you.html'); } else { header('Location: http://www.yoursite.com/home-page.html'); };
对于302 Found
,即临时redirect,请执行以下操作:
header('Location: http://www.yoursite.com/home-page.html'); // OR: header('Location: http://www.yoursite.com/home-page.html', true, 302); exit;
如果您需要永久redirect,又名: 301 Moved Permanently
,请执行以下操作:
header('Location: http://www.yoursite.com/home-page.html', true, 301); exit;
有关更多信息,请查阅文档头文件function的PHP手册。 另外,不要忘记打电话给exit;
当使用header('Location: ');
但是,考虑到您正在进行临时维护(您不希望search引擎将您的页面编入索引),build议您使用自定义消息(即,您不需要任何redirect)返回503 Service Unavailable
用:
<?php header("HTTP/1.1 503 Service Unavailable"); header("Status: 503 Service Unavailable"); header("Retry-After: 3600"); ?><!DOCTYPE html> <html> <head> <title>Temporarily Unavailable</title> <meta name="robots" content="none" /> </head> <body> Your message here. </body> </html>
以下代码将发出301redirect。
header('Location: http://www.example.com/', true, 301); exit;
你检查你收到什么标题? 因为你应该得到一个302
以上。
从手册: http : //php.net/manual/en/function.header.php
第二个特例是“位置:”标题。 除了已经设置了201或者3xx状态码以外,它不仅可以将这个头信息发送回浏览器,而且还会向浏览器返回一个REDIRECT(302)状态码。
<?php header("Location: http://www.example.com/"); /* Redirect browser */ /* Make sure that code below does not get executed when we redirect. */ exit; ?>
从PHP 文档 :
第二个特例是“位置:”标题。 除了已经设置了201或者3xx状态码以外,它不仅可以将这个头信息发送回浏览器,而且还会向浏览器返回一个REDIRECT(302)状态码。
所以你已经做了正确的事情。
我不认为这是真的很重要,你怎么做,从PHP或htaccess。 两者都会完成同样的事情。
我想指出的一件事是,你是否希望search引擎开始在这个“维护”阶段索引你的网站。 如果没有 ,你可以使用状态码503
(“暂时closures”)。 这是一个htaccess的例子:
RewriteEngine on RewriteCond %{ENV:REDIRECT_STATUS} !=503 RewriteCond %{REMOTE_HOST} ^192\.168\.0\.1 ErrorDocument 503 /redirect-folder/index.html RewriteRule !^s/redirect-folder$ /redirect-folder [L,R=503]
在PHP中:
header('Location: http://www.yoursite.com/redirect-folder/index.html', true, 503); exit;
使用当前正在使用的PHPredirect代码,redirect是302
(默认)。