おのれgoogle……
google検索で自サイトのタイトルを入力したらどのページが先頭に出るのか知りたくて、
打ってみた結果、
https://trp3l.com/index.php/about.html
が表示された。
index.php/about.html てなんやねん。
about.htmlなんていうファイルはルートに存在しないし、
ファイル名の後にさらにファイル名がくるのも謎だし、
おまけにこのurlにアクセスするとcssが読み込まれないせいで
モバイルライクなサイトじゃないとか勝手に評価されるし、
踏んだり蹴ったりだった。
こんなんじゃ誰もこのブログにたどり着けないじゃないか……。
ということで.htaccessに以下の文を追加した。
RewriteEngine on #文頭で既に記述済な場合は書かなくてよい。 RewriteCond %{THE_REQUEST} ^.*/index\.php/ RewriteRule ^(.*)$ https://%{HTTP_HOST} [R=301,L]
先頭に RewriteCond とある行がリダイレクト条件。
%{THE_REQUEST} は
ユーザーがサーバに対して行ったリクエストの内容。
今回の場合は
”GET trp3l.com/index.php/about.html HTTP/1.1″
といった感じか。
これに /index.php/ という文字列が含まれるかどうかが
^.*/index\.php/ の部分。
^は先頭文字が条件式と一致しているかどうか、
.*はワイルドカード、
.は特殊な用途があるので\.と書いてエスケープする。
二行目の RewriteRule は、どういった処理をするかの文。
^(.*)$ は条件に一致した全てのurl($は^と対の意味で、文末の文字が条件と一致しているかどうか)
%{HTTP_HOST} はこのサイトでは trp3l.com
つまり、条件「index.php/ がurlに含まれる」にひっかかる全てのリクエストをホームへリダイレクトする
という記述を行った。
正しい記述をしたのにローカル環境だとうまく動作しなかったので、
仕方なく本番環境でぶっつけ勝負したが、正しく動作してくれてよかった。
.htaccessの詳しい書き方は、
英語だがAPACHE公式が詳しい。
まだまだ読んでない箇所がたくさんあるので、もっとスマートな書き方があったかもしれない。