PHP 410重定向

pAk*_*Y88 0 php redirect http http-status-code-410

我正在使用WordPress,我会将所有未经授权的用户重定向到主页.

为了在头文件中这样做,我把(在文件的开头)以下PHP代码:

if (bp_current_component() != "" 
    && bp_current_component() != "event" 
    && !is_user_logged_in() 
    && !isset($_COOKIE[affiplus]) 
    && !isset($_GET[affid]))
{
    header( "HTTP/1.1 410 Gone" ); 
    header( "Location: ".get_option('siteurl')."/home/");
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,返回的HTTP错误代码总是302(永久移动)而不是我想要的410.为什么?

Law*_*one 10

或者,您可以使用刷新标头,这样它仍然会显示410响应,但也会重定向.

<?php 
if (bp_current_component() != "" && 
    bp_current_component() != "event" && 
    !is_user_logged_in() && 
    !isset($_COOKIE['affiplus']) && 
    !isset($_GET['affid']))
{
    header($_SERVER["SERVER_PROTOCOL"]." 410 Gone"); 
    header("Refresh: 0; url=".get_option('siteurl')."/home/");
    exit;
}
?>
Run Code Online (Sandbox Code Playgroud)

发送410(Gone)或(是一个页面但现在已经过去)的主要原因是搜索引擎不会将页面编入索引.

  • 请注意,我不建议静态设置标头协议.我建议小更新:`header($ _ SERVER ["SERVER_PROTOCOL"]."410 Gone",true,410);` (2认同)

rob*_*lls 8

您只能发送一个响应状态代码.因此,您可以发送错误响应(4xx)或重定向响应(3xx).当未经授权的用户尝试访问资源时发送410标头无论如何都是不正确的.

我认为只执行302就足够了.

  • 在这种情况下,发出301"永久移动"并指向主页.410是"这已经过去了,它不会回来,不要再打扰我了". (3认同)