SEO的に優れている点とわかり易さを優先してパーマリンクを標準の /?p=XXX から投稿名(スラッグ)に変更した。
WordPressをNginxのサブディレクトリで運用しているNginxの設定例はあまりなく、とりあえずphpmyadminを設定した際の設定を流用してみた。
最初に使用したblog.confの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
server { listen 80; server_name hogehoge.com; root /var/www/html; location / { index index.php index.html index.htm; } # Settings for PHP FPM. location ~ \.php$ { fastcgi_pass php-handler; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Setting for wordpress location ^~ /blog { alias /var/www/wordpress; index index.php index.html index.htm; try_files $uri $uri/ /blog/index.php?$args; location ~^/blog/(.+\.php)$ { alias /var/www/wordpress/$1; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php-handler; include fastcgi_params; } } upstream php-handler { server unix:/var/run/php-fpm/php-fpm.sock; } |
この設定で標準のパーマリンクは処理されるか、サブディレクトリ形式のパーマリンクではNot foundになる。エラーログを覗くとどうもtry_filesの動作が期待したものとは異なっているようだった。
try_filesの動作やNginx設定の詳細についてはこちらのページに詳しい情報が記載されています。。。
動作したblog.confの設定例(差分のみ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Setting for wordpress location ^~ /blog { alias /var/www/wordpress; index index.php index.html index.htm; #try_files $uri $uri/ /index.php?$args; if (!-e $request_filename) { rewrite ^/blog(.+)$ /blog/index.php?q=$1 last; break; } location ~^/blog/(.+\.php)$ { alias /var/www/wordpress/$1; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php-handler; include fastcgi_params; } } |
変更点は、try_filesを止めて rewrite でリダイレクトする点。
想定動作では、パーマリンクの/blog/start/が見つからないのでif文にマッチし、/blog/index.php にパラメータ付でリダイレクトするはず。
確かに、これでうまくいきました。