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-Control
やExpires
などの他のヘッダも無視するようです。前述したように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を見ることができます。しかし他のヘッダは送信されません。どこでこの問題をデバッグし始めるのでしょうか。ありがとうございました。
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