Edited at

nginxでwordpressのパーマリンクをデフォルト以外に対応する

More than 3 years have passed since last update.


パーマリンク対応

wordpressのパーマリンクを変更すると、RestfulAPIみたいに、ディレクトリ階層のURLに変更することができます。

Screen Shot 2015-04-25 at 02.53.34.png

ngix + php−fpmでは、nginx側でURLを処理して適切にphp-fpmへ渡してあげないといけません。(JavaEEのようにコンテキストを持たないので。。。)

nginx本家のドキュメントに説明があったので、それを元に設定してみます。


nginx.conf

中略…

server {

中略…
# URL デフォルトのリンクから変更した場合、URLでトライて、見つからないソースは、@wordpressロケーションとして飛ばします。
location / {
try_files $uri $uri/ @wordpress;
}
# index.php など、通常の.phpでのアクセス。見つからなければ@wordpressロケーションとして飛ばします。
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass …;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
その他fastcgiの設定…
}

# 階層型URLのパーマリンクでアクセスされた場合、(.phpで実行されなかった場合)wordpressのトップページのindex.phpへ投げてしまいます。
location @wordpress {
fastcgi_pass …;

fastcgi_param SCRIPT_FILENAME /path/to/index.php;

その他fastcgiの設定…
}



実装例


nginx.conf


中略

server {
listen 80;
server_name yourhost.com;
root /usr/share/nginx/wordpress;
index index.php

charset utf-8;

location / {
try_files $uri $uri/ @wordpress;
}

location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/wordpress$fastcgi_script_name;
include fastcgi_params;
}

location @wordpress {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/wordpress/index.php;
include fastcgi_params;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

中略