0

wordpress パーマリンク設定でカスタムした後に起る可能性のある問題とその問題切り分けの観点と対処法

vagrant上の仮想OS(cent os6.5)にwordpressで構築したサイトで
パーマリンクをカスタム設定した際、
トップページ配下のページ達やカテゴリがリンク切れエラー404:Page Not Found となった。

スクリーンショット 2015-03-01 16.36.16

パーマリンクをデフォルトに戻すと復旧するので被疑箇所はパーマリンクに不具合がある。その問題解消までの備忘録を残します。
wordpress初期導入時やサーバ移設時に起りやすい症状であり、
SEOやユーザビリティ観点からも影響ある部分なのでご参考にしていただきたい。

hachim.jp-splush-girl

パーマリンク設定

%category%/%postname%/
ページ遷移して404が返却されるという事は
wordpressが生成した内部リンク構造に問題がおこっており、
それは則ち「リンク切れ」が発生しているということ。

httpd_logo_wide_new_r1_c1
WordPressのパーマリンクは、

Apacheのmod_rewriteモジュールのRewrite機能を利用している。

サイトのユーザビリティの面でもSEOの面でも若干の悪影響が出てしまう。

デフォルト状態のパーマリンクは、Google が推奨するURLの2つの要件を満たしていない。
・IDではなく意味のある単語が使用されたシンプルなもの
・人間が論理的に理解できるもの
google URL構造

上記理由より、
SEO、ユーザビリティ観点において、パーマリンク設定は必須となる。

サーバ環境による話にはなるのですが、
いづれにしてもRewrite実装する方法は2つ
・apacheの設定に書き込む
・インストールディレクトリ直下に.htaccessファイルに書き込む

サーバ環境による話というのは、システム領域へのアクセス権限がそもそもできないサービスもあり、
つまり、その環境の場合はwordpressが利用できるかサーバ運営会社に問い合わせが必要です。


それでは先ず、システム領域にアクセス権限ありの場合の.htaccessによるRewrite実装方法から記載します。

.htaccessで設定を確認。

wordpressの管理画面上でパーマリンクを変更すると、
wordpressが.htaccessをインストールディレクトリ直下に自動生成されます。
ただし、.htaccessのパーミッションは777に設定してないとwordpressが書き出せせないゾ!と管理画面上でアラームとして知らせてくれます。
デフォルトでの.htaccessの設定は下記のようになっていると思います。

[vagrant@dev(192.168.33.) ~]$cat /var/www/html/wordpress/.htaccess
- - - 
# BEGIN WordPress

RewriteEngine On
RewriteBase /wordpress/  *注*
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]

# END WordPress

上記の様であればパーマリンクのRewrite設定に問題なし。
*注*RewriteBaseはwordpressをインストールディレクトリから変更していればそれに応じて変化する部分となります。

次にapacheの設定ファイル(httpd.conf)とRewriteモジュール(mod_rewrite.so)がインルトールされているか確認。
***「mod_rewrite」とはドメイン以下URLの書き換えなどを行うモジュール ***
ApacheのRewriteモジュールが組み込まれていない場合、
wordpressのパーマリンクは有効とはならない。

▼ apacheでmod_rewriteの確認

[root@dev(192.168.33.1) ~]$ grep 'mod_rewrite' /etc/httpd/conf/httpd.conf
- - -
LoadModule rewrite_module modules/mod_rewrite.so
- - -

上の結果となれば、apacheの設定ファイルでRewriteモジュールは組み込まれていることがわかる。

▼ apacheにRewriteモジュール(mod_rewrite.so)が組み込まれているか確認

[root@dev(192.168.33.1) ~]$ httpd -M | egrep -i "(rewrite|ok)" a.php
- - - 
rewrite_module (shared)
Syntax OK
- - -

モジュールの実態も確認しときましょう

find / -name "mod_rewrite" -print
- - -
/usr/lib64/httpd/modules/mod_rewrite.so
- - -

上の結果となれば、Rewriteモジュールはapacheミドルウェアに組み込み済となる。

なおmod_rewriteが使用できない場合、Apacheの設定ファイルhttpd.confを変更しなければいけません。
Apacheの設定ファイルhttpd.confを変更できない場合でmod_rewriteがインストールされている際には「Options FollowSymLinks」と.htaccessファイルの先頭に書き込めばmod_rewriteが使用できるようになります。

▼ apacheの設定ファイル(httpd.conf)で.htaccessの有効性を確認
確認したいドキュメントルート(今回の場合、/var/www/html)のディレクティブ設定を確認。

[root@dev(192.168.33.) ~]$ grep "/var/www/html/" /etc/httpd/conf/httpd.conf
- - -

      ・
      ・
      ・
# AllowOverride controls what directives may be replaced in .htaccess files.
# It can be "All", "None", or any combination of the keywords;
#   Options Fileinfo AuthConfig Limit
#
    AllowOverride None ← !!!

- - -

 ~ の中で
AllowOverrideがNoneのままだった。
このため、.htaccessの設定が無効になっていた。
そこで以下のように変更したらパーマリンクが期待する動作となった。

- - -
# AllowOverride None ←# 行頭#で、その行はコメントアウトになります。 
AllowOverride All
- - -

スクリーンショット 2015-03-01 16.29.13

なお、apacheの設定反映の為に、httpdの再起動をお忘れなく。

◆httpd.confにパーマリンク設定を書く場合(システム領域にアクセス権限ありの場合)
下記のように.htaccessの内容をdirectoryディレクティブで書いてあげればOKです。


# WordPress用にFollowSymLinksとAllowOverrideを有効にする
Options FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from all

# .phpをPHPとしてパース

SetHandler application/x-httpd-php

# WordPressパーマリンク設定
# START WordPress

RewriteEngine On
RewriteBase /wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です