WordPressのパーマリンク設定を変更してハマる

今回は軽い気持ちでパーマリンク設定を変更したらハマった話をまとめておく。

ちなみにパーマリンクというのは個々の記事を表すURL形式で、当然後からホイホイ変更すると記事のURLが変わってしまい厄介な事になるのは想像がつく。であるにも関わらず今回変更したのはデフォルトのURL形式の微妙さが気になってきた為である。

どんなURL形式にするか

元々はWordPressデフォルト設定の https://pc.tokuvin.net/?p=123 という形式にしていたが、どうもこれではURLからどんな記事なのか完全に不明で、クエリーが付いているのもスマートじゃない。

URLをスマートかつ記事の内容に沿った形にするには、投稿名を付けるのがベストだろう。という訳で https://pc.tokuvin.net/カテゴリ名/投稿名/ にしようかと思ったが、カテゴリ名も変更される可能性があり、その度にURLが変わるのもよろしくないという事で https://pc.tokuvin.net/投稿名/ という形に落ち着いた。これなら見た目にもシンプルでわかりやすい。

ただしURLに投稿名を含めると、日本語タイトルの記事は /post-123 のような投稿IDを使ったURLになってしまうので手動でスラッグを設定するという手間は必要になるがまあこれは仕方がないだろう。

パーマリンクを設定

URLの形式が決まったのでパーマリンク設定を開き、投稿名を使うようにチェックをして変更を保存する。

parmalink1

スラッグを設定

パーマリンクには投稿名を使うようにしたが、投稿名とはいっても日本語記事の場合は、記事ごとにスラッグを設定しないと”https://pc.tokuvin.net/post-123″というURLになりデフォルトのURL形式と大差ない事になってしまう。

URLの黄色い部分(この記事の場合はpost-699)が変更可能なスラッグである。デフォルトでは”post-数字”という形になっているので、これをわかりやすい物に変更する必要がある。

parmalink2

編集ボタンを押すと編集状態になるのでスラッグを入力。

parmalink3

変更したらOKをクリック。

parmalink4

このように全ての記事のスラッグを”post-数字”から意味のある物に変更していく。

parmalink5

動作確認

さてパーマリンク設定と、投稿のスラッグ設定を終えたら作業完了である。早速トップページに行って様子を見ると問題なしだ。

parmalink6

続いて先程作成したテストページに行くと見事に404・・・あれ? WordPressにデフォルトで用意されている機能で、お手軽に変更できるパーマリンク設定で失敗するとは思わなかった。

parmalink7

mod_rewriteモジュールを有効化

Not Foundになる原因を探すと、どうやらWordPressが.htaccessファイルを作れないのと、Apacheにmod_rewriteモジュールが有効ではないの2点が怪しそうだ。

.htaccessの方はパーミッションは問題ないので大丈夫だろうと思ったが一応確認するとちゃんと作成されていたのでこれではない。という事でmod_rewriteモジュールを当たってみる、まずはモジュールの存在確認だ。

$ cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

mod_rewriteモジュールは存在したので有効化してみる。

# cd /etc/apache2/mods-available
# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
 service apache2 restart

Apacheを再起動する。上のコマンドを実行してModule rewrite already enabledと表示されれば、既にモジュールは有効になっていたのでApacheの再起動は不要だ。

# /etc/init.d/apache2 restart

そして再度記事のURLにアクセスするとやっぱりNot Foundでダメ。

VirtualHostを設定

次にWordPressが作成する.htaccessの使用を無効にしていないか、ApacheのVirtualHost設定ファイルを見てみる。hoge.confの部分は自分のWordPressディレクトリ用の設定ファイル名を使用する。

# vim /etc/apache2/sites-available/hoge.conf

ファイルを開いたらAllowOverrideを探す、するとnoneになっていたのでAllに変更する。

AllowOverride none
↓
AllowOverride All

Apacheを再起動する。

# /etc/init.d/apache2 restart

そして再び記事にアクセスすると成功!

parmalink8

Google XML SitemapsのURL変更に注意

パーマリンク設定がデフォルト形式の時は、Google XML Sitemapsが生成するサイトマップのURLは/index.php?xml_sitemap=params=だったのが、投稿名形式にすると/sitemap.xmlに変更されるので注意が必要だ。サイトマップをGoogle Search Console等に登録している場合はURLを設定し直す必要がある。

おわりに

パーマリンク設定の変更自体は簡単にできるが、変更すると影響が広範囲に及び、投稿にスラッグを設定したり、ページ間のリンクを貼り直したり(まあしなくてもリダイレクトはされるけど)、予想外のNotFoundになったりと手間がかかった。パーマリンク設定を変更するなら最初にやっておかないと厄介だという結論。

スポンサーリンク