アクセスしたページに対して、サーバサイドリダイレクトや、meta要素のrefreshを用いたページリダイレクトをオンラインで検証することができる、リダイレクト検証ツールというWebツールがあります。以下に書かれているものがそれです。
いきなり、リダイレクト検証ツールの話から入りましたが、今回は404エラーとリダイレクトの話です。
ことの始まりは、前回の宅建の試験に合格するぞぉの記事で書いた 『404エラーを返してトップページにリダイレクトするようにしている。』 の部分ですが、書かれてある通りで、header() で、『404 Not Found』 を返して、そのまま header(Location: URL) でリダイレクトしていました。
リダイレクトを正しくできていないと、検索エンジンにスパム扱いをされるとどこかで目にしたので、正常にリダイレクトされてるか、上記のツールを使って調べてみました。そしたら 『302 Found』 を返してリダイレクトしているという結果がでたのです。
で、『HTTP Status』 で検索してみると [Studying HTTP] HTTP Status Code にたどり着いたのですが、これを見た感じだと 3XX を返す時意外はリダイレクトするのはダメなのではという気がしてきました。
また、404エラーでリダイレクトするのは使いづらいというようなこと書いてる人もいました。理由は 『ブラウザのアドレスバーに直接URLを打ち込んだ時に、タイプミスでリダイレクトされたら初めから打ち直さないといけないから』 というようなことだったのですが、ごもっともです。自分はトップページにリダイレクトしたほうが、ユーザや検索エンジンにやさしいかと思っていたのですが、見当違いでした。
なので、404 エラー用のページを作って、リダイレクトするプラグインを修正して、不正なURLにアクセスした時は、404 エラーを返して、404 エラー用のページを表示するようにしました。
おかげで、Ethna の Ethna_Controller を少しだけトレースしたので、Filter、Action、View の流れが理解できてきて、スマートな構成になりました。ついでに UrlHandler の使い方も 『理解できてきたかな?』 くらいになりました。
Controller 部に関しては、メモしておかないと忘れそうなので、近いうちに書こうと思っています。