私は[〜#〜] nginx [〜#〜]サーバー上にサイトホストを持っていますが、これはindex.php
を使用してnginxサイト構成でtry_files
を削除するために正常に機能していました。
しかし、ここにブログを追加します。URLはwww.foo.com/blog
になります。ブログにアクセスしてindex.php?p=
を使用できます。
しかし、Nginxヘルパーwww.foo.com/blog/2013/07/bar
でprettyパーマリンクを使用すると、404
が得られます。
server {
# don't forget to tell on which port this server listens
listen 80;
# listen on the www Host
server_name foo.com;
# and redirect to the non-www Host (declared below)
return 301 $scheme://www.ultra-case.com$request_uri;
}
server {
# listen 80 default_server deferred; # for Linux
# listen 80 default_server accept_filter=httpready; # for FreeBSD
listen 80;
# The Host name to respond to
server_name www.foo.com;
# Path for static files
root /web/foo.com
#index file
index index.php;
#Specify a charset
charset utf-8;
# Custom 404 page
error_page 404 /404.html;
# Uri Rewrite
location /blog {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
location / {
autoindex on;
# This is cool because no php is touched for static content.
# include tihe "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
# Include the component config parts for h5bp
include conf/h5bp.conf;
}
受け入れられた答えは、index.php
。
これにより、特定のスクリプトインクルードが壊れますwp-adminスクリプトがその1つです。
location /blog/ {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
ええと...コメントと回答ありがとうございます。しかし、最後にこの方法を使用して機能させます
location /blog {
index index.php;
rewrite ^/blog/(.*)+$ /blog/index.php?$1; # it finally works
# return 200 $request_uri; # it is for inspect what $request_uri is
# try_files $uri $uri/ /blog/index.php$request_uri$is_args$args; # it gets 500 server error
}
現在の設定に問題がないかどうかを指摘してください。ありがとうございました!
サブフォルダー/ブログの下のパーマリンクをキャッチするには、次のことをお勧めします
location /blog {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
これを試してください、私はあなたの書き換えで使用している同じ動作を模倣するように私の答えを変更しました。
location ~ /blog(.*) {
index index.php;
try_files $uri /blog/index.php?$1&$args;
}
パーマリンクを有効にすると、ここに示す両方の回答の組み合わせを必要とすることがわかりました。それ以外の場合
これは私のセットアップに取り組んでいます
location /blog/ {
rewrite ^/blog/(blog/(tag|category|20??)/.*)+$ /blog/index.php?$1;
try_files $uri $uri/ /blog/index.php?$args =404;
}
ルートと1つのサブフォルダーレベルでのきれいなURLのユニバーサルソリューション:
set $virtualdir "";
set $realdir "";
if ($request_uri ~ ^/([^/]*)/.*$ ) {
set $virtualdir /$1;
}
if (-d "$document_root$virtualdir") {
set $realdir "${virtualdir}";
}
location / {
try_files $uri $uri/ $realdir/index.php?$args;
}
これを試して
location /api {
# example: http://demo.com/api/channels/dmzb
root /data/webserver/demo.com/api/web;
rewrite ^/api/(.*) /$1 break;
try_files $uri $uri/ /api/index.php?$args;
location ~ ^/api/index\.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
# fix request_uri
set $changed_request_uri $request_uri;
if ($changed_request_uri ~ ^/api(.*)) {
set $changed_request_uri $1;
}
fastcgi_param REQUEST_URI $changed_request_uri;
# fix script_filename
fastcgi_split_path_info ^(?:\/api\/)(.+\.php)(.*);
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
Phpについて考えてみてください。次のようなものでは、書き換えは必要ありません。
location /app/ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/your/app/index.php;
fastcgi_pass php;
}
次のfastcgiパスで
upstream php {
server unix:/var/run/php5-fpm.sock;
}