web-dev-qa-db-ja.com

私自身のスクリプトでは不思議なHTTP 404ヘッダ

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ヘルパー も使っています。私はただ一つのサイトを運営しているだけなので、私はそのパーマリンク美化機能だけを使いました。

私は自分のカスタムスクリプト(WordPress以外)が404ヘッダを返していることに気づきました。たとえば、index.php/mysite/public_html/my/に入れ、ブラウザでhttp://wp.mysite/my/を指定すると、正しいMIMEタイプでもHTTP 404ヘッダーを使用してもスクリプトは正常に実行されます。

Fastcgiのためにheader("Status: 200 OK");を置くことはうまくいきません。実際、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を見ることができます。しかし他のヘッダは送信されません。どこでこの問題をデバッグし始めるのでしょうか。ありがとうございました。

2
He Shiming

HTTP 404エラーの原因はrequire('../wp-blog-header.php');です。ヘッダコードを次のように置き換えました。

status_header(200);
nocache_headers();

どちらもWordPress APIの一部です。そして問題は解決しました。私はこの解決策を見つけた: http://wordpress.org/support/topic/integrated-wp-in-external-php-pages?replies=22

1
He Shiming