WordPressをインストールして初期状態にもかかわらず、ダッシュボードでパーマリンクの更新をしたときに以下のようなエラーが出て、その後サイトが表示できなくなる現象が起きました。
Forbidden You don't have permission to access /wp-admin/options-permalink.php on this server.
こんな現象は初めてだったのでかなり焦って原因を調べましたが、対策がわかるまで結構大変だったのでこの記事でまとめておきたいと思います。
現象:パーマリンクの更新で403エラーが起きた
CPIのレンタルサーバーでWordpressを新規インストール。
その後、設定⇒パーマリンクと進み、更新を押すと、以下のメッセージが表示される。
Forbidden You don't have permission to access /wp-admin/options-permalink.php on this server.
その後は、すべてのページが403になってしまう。
原因:.htaccessの記述が不足している
パーマリンクの更新を押すと、.htaccessファイルが更新される。
その際、以下の3行目の記述が追加され、403のエラーになる模様。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
対策:.htaccessに記述を追加する
.htaccessに以下の記述を追加することで問題が解消しました。
.htaccessの<Directory>でRewriteEngineをOnにするにはOptions FollowSymLinksを設定しなければならないとApacheの公式サイトにあります。
おそらくmod_rewriteが内部でシンボリックリンクを使っているからでしょう。
ちなみにFollowSymLinksは「シンボリックリンクを有効にする」という設定です。
SymLinksIfOwnerMatchはさらにセキュリティを高めた「ファイルの所有者に限りシンボリックリンクを有効にする」という設定です。
https://teratail.com/questions/8460
Options +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
まとめ
とても分かりにくい不具合現象だったのですが、一行追加するだけで問題なくなりました。もしパーマリンクの更新で403エラーになってしまったときにはこの記事の内容を思い出してみてください。