301或302使用PHP重定向

时间:2012-02-20 15:36:09

标签: php

我正在考虑在网站启动阶段使用以下代码向用户显示 down for maintenance 页面,同时向我展示网站的其余部分。

有没有办法向搜索引擎显示正确的302重定向状态,还是应该寻找另一种基于.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');
};

6 个答案:

答案 0 :(得分:116)

对于302 Found,即临时重定向,请执行以下操作:

header('Location: http://www.yoursite.com/home-page.html');
// OR: header('Location: http://www.yoursite.com/home-page.html', true, 302);
exit;

如果您需要永久重定向,又名:301 Moved Permanently,请执行:

header('Location: http://www.yoursite.com/home-page.html', true, 301);
exit;

有关更多信息,请查看header function Doc的PHP手册。此外,请勿忘记在使用exit;

时致电header('Location: ');

但是,考虑到您正在进行临时维护(您不希望搜索引擎将您的网页编入索引),建议您使用自定义消息返回503 Service Unavailable(即您不要&# 39; t需要任何重定向):

<?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>

答案 1 :(得分:17)

以下代码将发出301重定向。

header('Location: http://www.example.com/', true, 301);
exit;

答案 2 :(得分:6)

我不认为你是怎么做的,从PHP或htaccess。两者都将完成同样的事情。

我想指出的一件事是,您是否希望搜索引擎在此“维护”阶段开始为您的网站编制索引。如果,您可以使用状态代码503(“暂时关闭”)。这是一个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;

使用您正在使用的当前PHP重定向代码,重定向为302(默认)。

答案 3 :(得分:3)

你检查了你得到的标题吗?因为你应该得到一个302以上。

来自手册:http://php.net/manual/en/function.header.php

  

第二个特例是“Location:”标题。它不仅将此标头发送回浏览器,而且还向浏览器返回REDIRECT(302)状态代码,除非已经设置了201或3xx状态代码。

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

答案 4 :(得分:3)

来自PHP documentation

  

第二个特例是“Location:”标题。它不仅将此标头发送回浏览器,而且还向浏览器返回REDIRECT(302)状态代码,除非已设置201或3xx状态代码。

所以你已经做了正确的事。

答案 5 :(得分:1)

将此文件保存在.htaccess

所在的目录中
RewriteEngine on
RewriteBase / 

# To show 404 page 
ErrorDocument 404 /404.html

# Permanent redirect
Redirect 301 /util/old.html /util/new.php

# Temporary redirect
Redirect 302 /util/old.html /util/new.php