だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

静的サイト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タグを設定して、リダイレクト先を指定しておくと、ブラウザがそこのページを向くようになります。

ただ、上記はあくまで自分のケースの場合ですので、絶対ではないかもしれません。

リダイレクトでエラーになったり、うまくできない時は、ぜひ参考にしてみてください!

ページ上部に戻る