Contents
はじめに
WordPressのデフォルトのパーマリンクってダサいですよね。「?」とか入っているし。
WordPress始めてもう4年も過ぎてて今更SEO対策のためというわけではないのですが、始めた当時は何が正解なのかもわからず、取り敢えず弄ってみたが画面が表示されず・・・
もともとはサーバの学習目的でWordPressを立てただけなので、パーマリンクの設定は放置してました。今回は気が向いたので改めてパーマリンクを設定し直そうと思ったのと、変更したら「Not Found」で画面が表示されなくなってしまい、対処法に少々ハマったので記事にしました。
WordPressのパーマリンクの設定
WordPressの管理画面で「設定」 > 「パーマリンク設定」で変更できます。
どんな形式がいいのか、参考になるサイトはたくさんあるので見てみるといいです。私はこちらのサイトを参考にさせていただきました。
私のサイトはすでに/esthome/というディレクトリを切っているので、その配下に/カテゴリ名/投稿IDの形式にするためカスタム構造に構造タグを設定しました。
構造タグについてはパーマリンクの右上の「ヘルプ」に説明があります。「ヘルプ」にもリンクがありますが、こちらも参考になります。
「変更を保存」をクリックして設定を反映します。
ちなみにカテゴリ名が日本語だとそのまま日本語が%category%に入るので、これがURLに表示されるのは好みじゃないです。URLコピペするとURLエンコードされてしまいますし。
管理画面の「投稿」 > 「カテゴリー」の編集でスラッグを設定することでパーマリンク用の文字列を設定できます。
%post_id%は記事固有のID(数字)が入るので特に弄る必要はありません。本当はURLである程度内容が分かるようにしたかったので、%postname%を使って記事名にしたいところでしたが、ほとんど記事名は日本語なのでそれがパーマリンクになるのはやはりちょっと・・・。記事名もスラッグ設定できるので、パーマリンク用にアルファベットにすることもできますが、毎回考えるのが非常に面倒だなと思って%post_id%に落ち着きました。
ブラウザにNot Foundが表示された場合
ユーザがパーマリンクで設定されたURLでアクセスしてきたときに、もともとのURLにリライトする必要があります。
Apacheの場合、mod_rewriteモジュールでリライト設定をしていますので、このモジュールが有効になっているか確認します。
ちなみに今回の環境はApache2.4でソースからインストールしてます。環境によって異なると思うので参考までに。
mod_rewriteの有効化
[root@localhost ~]# vi /usr/local/httpd-2.4.18/conf/httpd.conf #LoadModule rewrite_module modules/mod_rewrite.so # ↓ LoadModule rewrite_module modules/mod_rewrite.so
mod_rewriteモジュールが無効になっていたのでコメントを外してapache再起動して有効にします。
mod_rewriteの確認
[root@localhost ~]# /usr/local/httpd-2.4.18/bin/apachectl -M rewrite_module (shared)
rewrite_moduleが表示されることを確認する。
ここで私の環境の場合、Not Foundが改善されなくてトーンダウン・・・
パーマリンクのリライト設定
WordPressインストール時にインストールディレクトリ直下の.htaccessに記述されているらしいので一応確認。
[root@localhost ~]# cat /var/www/html/esthome/.htaccess # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /esthome/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /esthome/index.php [L] </IfModule> # END WordPress
AllowOverrideで.htaccessファイルを制御する
結論から言うとセキュリティのため、私の環境では.htaccessファイルの機能を無効にしてたので、これを有効にしたら無事画面を表示させることができました。
Apacheの設定ファイルで複数個所に設定されていますが、設定するのはドキュメントルートのディレクトリだけです。
[root@localhost ~]# vi /usr/local/httpd-2.4.18/conf/httpd.conf <Directory "/var/www/html"> ...(省略)... #AllowOverride None # ↓ AllowOverride All ...(省略)... </Directory>
Apache再起動して設定を反映させます。
.htaccessファイル扱いは怖いので基本無効にしてます。ざっとネットで調べた感じでも上記の"AllowOverride All"の設定を紹介しているところが多かったですが、リライトの設定だけでNoneからいきなりAllというのはどうも抵抗があったので、他に設定がないか調べてみました。
公式ドキュメントを見るとmod_rewriteを有効にしたいだけなら、FileInfoでもよさそうです。
[root@localhost ~]# vi /usr/local/httpd-2.4.18/conf/httpd.conf <Directory "/var/www/html"> ...(省略)... #AllowOverride None #AllowOverride All AllowOverride FileInfo ...(省略)... </Directory>
Apache再起動して設定反映。
うまくいきました!
■参考サイト
WordPressのパーマリンクを変更したら「Not Found」が表示された場合の対策
パーマリンク設定カスタム構造で404
WordPressの引越しでパーマリンクの404 Not Foundエラーが発生
Apacheのmod_rewriteモジュールの使い方を徹底的に解説