【WP】「.htaccess」で「index.html」のリダイレクトに失敗する原因!
目次 -index-
ワードプレスをサブディレクトリにインストールしてサイトアドレス(URL)した際にURL正規化にめっちゃハマって苦労した話です。
前置き
ドメイン直下にはサーバーのファイルとかがあるのでそちらにワードプレスのインストールしたくなかったので「wp」というサブディレクトリを作り、そこにワードプレスをインストールしました。
それだとサイトアドレスがhttps://wp-note.com/wp/となってしまうので下記URLの後者「方法 II (URL 変更する場合)」のやり方でhttps://wp-note.com/になるようにしました。
ドメイン直下のディレクトリとサブディレクトリ(wp)のふたつに「.htaccess」が存在することになりますが今回編集したのはドメイン直下にある方です。
URL正規化とは
「URL正規化」とは以下のようなURLのページにアクセスがあった場合にすべて「https://wp-note.com/」にリダイレクト(自動転送みたいな意味)させてひとつのアドレスにすることです。
この処理をやっておかないと訪問者が混乱しますし、グーグルに重複サイトとみなされて宜しくないことがあるためです。
当サイトでは「wwwなし」、「index.htmlなし」に統一しています。
以下のアドレスを転送処理します。
SSL化している場合は http → https に転送する処理も必要です。
301リダイレクト処理
リダイレクトには「.htaccess(ドットエイチーアクセス)」が馴染みがあるのでそちらでやったんですが、これでハマって2日ほど頭を悩ませました。
1「http」→「https」にリダイレクト(転送)する処理は問題なく動作しました。
2「wwwあり」→「wwwなし」も問題なく動作しました。というか何故かこの記述がなくても転送されていました。
3「index.htmlあり」のURLを「index.htmlなし」に転送する処理で失敗しました。
ワードプレスに.htaccessファイルには「# BEGIN WordPress」~「# END WordPress」というコメントで囲まれた処理が書かれていますが、そのあとにリダイレクト処理を記載していました。
12の処理はこの記載方法でもちゃんと処理が行われたんですが3の処理だけはうまくいかずにハマりました。
どうもリダイレクト処理を「# END WordPress」のあとに記載していたのが原因みたいで「# BEGIN WordPress」の前に記載したらちゃんと動くようになりました。
まとめ
原因は記載する順番でした。
今回のことで「.htaccess」や「正規表現」についてかなり調べたのでそれはそれで良かったんですが、基本を知らないとこういったところで無駄に時間を要してしまいます。
処理を記載した後に動作確認する際にはブラウザにキャッシュされていることもあるようなのでChromeのディベロッパーツールにある「キャッシュの消去とハード再読み込み」でリロードしないとちゃんと動作しないことがありました。