制作Note

MAMPを7.2にバージョンアップしたら下層ページにアクセスできなくなった

MAMP mod_rewrite 設定備忘録

開発環境でMAMPを使用しています。バージョンアップをしたら不具合がおきたので備忘録として残しておきます。

事象

トップページやワードプレスの管理画面へのアクセスは問題ないのだが、下層ページのアクセスが404 Not Foundになってしまう。

原因

WordPressでは、mod_rewriteモジュールが利用できないと、下層ページ等で404 Not Found エラーとなってしまう。バージョンアップをしたのが原因でバージョン7以上はデフォルトの設定でmod_rewriteがコメントアウトされて使えない状態になっている。

WordPressにおけるmod_rewriteの重要性

mod_rewriteが無効の場合の影響

基本パーマリンク以外では404エラーになります:


https://example.com/sample-post/
(投稿ページ)

https://example.com/category/news/
(カテゴリページ)

https://example.com/about/
(固定ページ)

https://example.com/2024/01/
(日付アーカイブ)

https://example.com/?p=123
(基本パーマリンクのみ動作)

なぜこうなるのか?

WordPressのURL処理の仕組み:

美しいURL(カスタムパーマリンク)→ WordPressの内部パラメータに変換

例:/sample-post//?p=123

mod_rewriteの役割:

# .htaccessでの変換例
RewriteRule ^sample-post/?$ /?p=123 [L]

mod_rewriteが無効だと:

  • この変換処理が実行されない
  • Webサーバーは実際のファイル /sample-post/ を探そうとする
  • そんなファイルは存在しないので404エラー

基本パーマリンクが動作する理由

基本パーマリンク(/?p=123)は:

  • すでにWordPressの内部パラメータ形式
  • mod_rewriteによる変換が不要
  • 直接WordPressのindex.phpで処理される

💡 つまり、WordPressで任意のカスタムURLを使うには、mod_rewriteは必須ということですね!

これがWordPressの管理画面でパーマリンク設定を変更すると、自動的に.htaccessファイルにRewriteルールが書き込まれる理由でもあります。

解決策

MAMPのApache設定ファイル(/Applications/MAMP/conf/apache/httpd.conf)で以下を確認

1. 下記の部分を探す

#LoadModule rewrite_module modules/mod_rewrite.so

2. #を消してコメントアウトを外す

LoadModule rewrite_module modules/mod_rewrite.so

この設定の後にMAMPを再起動すると正常にアクセスされるようになりました。

MAMP mod_rewrite 設定備忘録