我自己脚本中的神秘HTTP404标头

时间:2013-02-11 作者:He Shiming

我有一个WordPress 3.5.1+nginx配置。其nginx配置如下:

server {
    root /mysite/public_html;
    server_name wp.mysite;
    location / {
        try_files $uri $uri/ /index.php;
        index index.php index.html index.htm;
    }
    location ~ \\.php(.*)$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        if ($uri !~ "^/uploads/") {
                fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        }
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /mysite/public_html$fastcgi_script_name;
    }
}
注意WordPress的index.php 在中/mysite/public_html/.

我也在使用nginx helper. 因为我只运行一个网站,所以我只使用了它的permalink美化功能。

我注意到我的自定义脚本(WordPress之外)返回404个标题。例如,如果我把index.php 进入/mysite/public_html/my/, 并将浏览器指向http://wp.mysite/my/, 即使使用正确的MIME类型,但使用HTTP 404头,脚本也可以正常执行。

放置header("Status: 200 OK"); (对于fastcgi)不起作用。实际上,它似乎忽略了其他标题,例如Cache-ControlExpires 也它确实起作用了Content-type 正如我前面提到的。实际上,其标题部分是:

$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == \'cgi\')
    header("Status: 200 OK");
else
    header("HTTP/1.1 200 OK");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-type: image/jpeg");
imagejpeg($this->im, null, 80);
我可以很好地看到JPEG。但不发送其他标头。我想知道从哪里开始调试这个问题?非常感谢。

1 个回复
最合适的回答,由SO网友:He Shiming 整理而成

结果是require(\'../wp-blog-header.php\'); 导致HTTP 404错误的部分。我将标题代码替换为:

status_header(200);
nocache_headers();
两者都是WordPress API的一部分。问题就解决了。我从以下位置找到此解决方案:http://wordpress.org/support/topic/integrating-wp-in-external-php-pages?replies=22

结束

相关推荐

如果加载了404.php,如何与IS_PAGE核对?

我想检查当前页面是否至少符合两个条件中的一个。我不想在about页面和404页面中显示js代码。在剩下的页面中,我展示了js代码。所以,我使用((!is_page(element1) AND !is_page(element2)) 然后显示js代码。Element1是一个特定页面的slug,element2是404。php页面。我不知道在if语句中要显示的404页的slug或名称。