静的サイトindex.htmlなどを.htaccessでリダイレクトさせるには
先日、静的サイト(index.htmlを扱うサイト)のリダイレクト処理をした時、ちょっとエラーに悩まされたので、その体験談を備忘録的にまとめておきます。
目次
発生したエラー
問題になったのが、.htaccessの下記コードです。
RewriteEngine On
RewriteBase /
Redirect permanent /test/ http://www.sample-website.com/test.html
これは、元々あった、
http://www.sample-website.com/test/index.html
というページをなくして、
新しく作成した、
http://www.sample-website.com/test.html
というページにリダイレクトをしようとした時のものでした。
この時に発生したエラーが、
http://www.sample-website.com/test/index.html
にアクセスすると、
http://www.sample-website.com/test/
(= http://www.sample-website.com/test.html/)
という読み方になってしまい、最後にスラッシュが入ってしまうことで、相対パスが崩れてしまう、という内容のエラーでした。
原因として、名前が問題の様子
同環境における.htaccessのコードにおいて、リダイレクト前の部分を/test/ではなくて、/example/というように、異なる名前にしてからリダイレクトを試してみたところ、この場合は問題は起きませんでした。(ちゃんとリダイレクトされる。)
RewriteEngine On
RewriteBase /
Redirect permanent /example/ http://www.sample-website.com/test.html
つまり、リダイレクト前とリダイレクト後において、「/test/」と、「test.index」というように、同名にしてしまうと、ブラウザが変な解釈をしてしまうことがあるようです。(最後のスラッシュ部分を削除してあげるような指定ができれば、それで解決できそうですが、自分には見つけられず・・・ただ、ひとまずの対処法は発見できました。)
対処法
リダイレクト前のディレクトリ(ファイル)を置くようにして、そのファイルのheadに、canonicalタグを設定してあげると、無事にリダイレクトされるようになりました。
・「~/test/index.html」を作成
↓
・headタグに、canonicalタグを設置。「http://www.sample-website.com/test.html」がメインだと指定
↓
ブラウザがきちんと、http://www.sample-website.com/test.htmlを向くようになる
あとは、検索エンジンがクロールして、インデックス登録すれば、もろもろ削除してOKだと思います。
まとめ
ウェブサイトのリニューアル前、そのディレクトリ構造において、
・index.html
┗dir1/index.html
┗dir2/index.html
┗dir3/index.html
といった感じで下層ページを区切っている場合、リニューアル後に、
・index.html
・dir1.html
・dir2.html
・dir3.html
のように書いて、リダイレクトを試みると、エラーが起きるかもしれないので、十分に気をつけてください!
困ったら、「.htaccess」にてリダイレクト指定をして、その後、リダイレクト元のファイルにcanonicalタグを設定して、リダイレクト先を指定しておくと、ブラウザがそこのページを向くようになります。
ただ、上記はあくまで自分のケースの場合ですので、絶対ではないかもしれません。
リダイレクトでエラーになったり、うまくできない時は、ぜひ参考にしてみてください!