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 (默认)。