.htaccess でリダイレクトする場合、一般的に使うのはこんな↓書式だと思います。
Redirect permanent /old/ http://www.btmup.com/new/
「/old/」がリダイレクト元、「http://www.btmup.com/new/」がリダイレクト先です。
そこら辺のことを以前まとめた記事があるので、興味のある方はどうぞ。
»PHPのページをWordPressのブログに301リダイレクトする。 | btmup Blog
で、今回、あるサイトのリニューアルに伴って、リダイレクトする必要がありました。
何も考えずに上記の方法でしようとしたら、何と「505 Internal Server Error」が発生!!
色々試してみましたが、明らかに「Redirect permanent」を使用した場合にエラーが発生しています。
ちなみに、そのサーバーはアイルの「iClusta」(「i-02」プラン)。
「稼働率100%」が謳い文句の人気レンサバです。
システム構築担当の方も仰ってましたが、なかなか制限の多いサーバーのようで。
それだけ動作が安定してるってことなのかも知れませんが……。
皆様もご使用になる場合はご注意を。
さてさて、使えないもんはしょうがないので、別な方法でやってみました。
「Redirect permanent」が使えない場合の301リダイレクト
アイルの公式サイトにある「よくある質問」で調べてみると、「Redirect permanent」に関する記述は見つかりませんでしたが、「RewriteRule」なら使えることが分かりました。
»【iクラスタ】リダイレクトの方法を教えてください。(アイルホスティングサービス : よくある質問)
そこで、「RewriteRule」を使用した方法を検討します。
参考にしたのは、たびたびお世話になっている下記ページ。
».htaccess - Rewrite
この中にある「ファイルの移転」がどうやら使えそうなので、それを参考に考えてみました。
今回、ルートにあるファイルから、同名のディレクトリへリダイレクトする必要がありました。
つまり、「/hoge.html」にユーザーがアクセスしたら、「/hoge/」へリダイレクトしたいわけです。
その条件を上記の「ファイルの移転」にあった書式に当てはめてみて、完成したのがこんな記述。
RewriteRule ^hoge.html$ /hoge/ [R=301,L]
終わってみれば意外と単純。
「RewriteRule」という文字を見ると、正規表現バリバリの記述をつい条件反射的に思い浮かべてしまいますが、実はそうでもなかったんですね。
あえて説明するまでもないと思いますが、「^hoge.html$」がリダイレクト元で、「/hoge/」がリダイレクト先です(フルパスを書く必要はなく、ルートからのパスで良さげ)。
「^」とか「.」とか「$」とか、正規表現っぽい要素が残ってますが、正直なところイマイチ理解してません。
なので、もしこの方法を使う場合は、大人しくこのまま使って必要なところだけ書き替えるのが賢いやり方だと思います。
あ、もちろん「RewriteEngine on」と「RewriteBase /」も書いといてくださいね。
以上、備忘メモ終わり!!