header.php
if(getOption('maintence_mode')==1)
{
header("location:503.php");
exit;
}
503.php
<?php
$protocol = "HTTP/1.0";
if ( "HTTP/1.1" == $_SERVER["SERVER_PROTOCOL"] )
$protocol = "HTTP/1.1";
header( "$protocol 503 Service Unavailable", true, 503 );
header( "Retry-After: 3600" );
?>
<!DOCTYPE html>
<head>
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />
<title>Page Not Found </title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta http-equiv="refresh" content="6;url=index.php">
</head>
<body>
<h2>Site is currently in maintenance mode.</h2>
</body>
</html>
我想知道我的代码是否正确以及Google将如何处理SEO。我对此没有太多了解,因此如果有人可以验证此代码将非常有帮助。
#1 楼
对我来说看起来不错,但是我有话要说。如果我想访问
http://yourdomain.com/example/page
并遇到503错误,我希望能够在一段时间内刷新页面,看看503错误是否解除。您要做的是将用户重定向到503页面,这意味着如果刷新后要获取的地址是
http://yourdomain.com/503.php
,这不是最佳选择。 而不是重定向,包括503错误页面。 503,但标题显示“找不到页面”
代码缩进很重要。不要忽略它!
切勿使用没有花括号的
if
块。从不。评论
\ $ \ begingroup \ $
“而不是重定向,而是包含503错误页面。” -是的,如前所述...同样,如果您重定向的第一个响应,则客户端获得的是302,而不是预期的503。
\ $ \ endgroup \ $
–怀特先生
2014年8月19日在16:39
\ $ \ begingroup \ $
“切勿使用不带大括号的if块。切勿。” +1你是个好人。
\ $ \ endgroup \ $
– FreeAsInBeer
2014年8月20日在13:24
#2 楼
维护代码除了@Madara Uchiha的优点:
除了
header Retry-After
之外,还使用http-equiv="refresh"
,这似乎很奇怪。 http-equiv="refresh"
将在6秒后将用户重定向到index.php
,从而使header Retry-After
无效。 W3C建议不要使用元刷新,我认为在您的情况下,header Retry-After
是更好的解决方案,因为首先将用户重定向到503.php
,然后再重定向到index.php
,从那里可能会再次转到503.php
令人困惑。当然,那么您需要包括@Madara Uchiha建议的而不是重定向,否则用户将永远停留在
503.php
上。但是,与包含相比,包含内容比重定向更具用户友好性(用户停留在页面上并可以手动重新加载),这不是问题。 503
是Google建议处理计划内停机的方式,因此这绝对是可行的方法。 Google对其在搜索结果中的位置影响如何并不是100%透明的,但是停机时间是一个会对您的信誉产生负面影响的变量,因此请尽量减少它。
#3 楼
小nitpick:您缺少初始的<html>
标签。评论
\ $ \ begingroup \ $
您需要添加更多的信息。
\ $ \ endgroup \ $
–bhathiya-perera
2014年11月18日,下午3:21
\ $ \ begingroup \ $
@JaDogg答案虽然简短,但确实提出了具体的改进。我认为做一个答案就足够了。
\ $ \ endgroup \ $
– 200_success
2014年11月18日,下午3:35
\ $ \ begingroup \ $
@ 200_success是的,您是正确的,这是一个很大的改进,我也对此进行了投票。但是,添加更多信息将吸引更多赞成票。
\ $ \ endgroup \ $
–bhathiya-perera
2014年11月18日4:33
评论
if(basename($ _ SERVER ['PHP_SELF'])=='503.php')是否总是正确?
我注意到您使用的是相对URI 503.php。我建议将其设置为绝对URI。为了引用php.net的位置文档:HTTP / 1.1需要绝对URI作为Location的参数:包括方案,主机名和绝对路径,但是某些客户端接受相对URI。通常,您通常可以使用$ _SERVER ['HTTP_HOST'],$ _ SERVER ['PHP_SELF']和dirname()从您自己的亲戚那里创建绝对URI。这里的示例代码,向下滚动到倒数第二个“ Note”部分。
Google博客的旧文章,但实际文章:如何处理计划的网站停机时间