RewriteRuleでアクセスしやすいURLを設定してみた
Jommla!で運営しているサイトがあって、基本的にはトップURLから入ってもらうのだけど、新しいサービスや製品を紹介したページのURLをニュースリリースに載せるとき、メニュー構造を反映した長いURLではなく、http://トップドメイン/サービス名のようなURLを追加したいときがある。
WWWサーバーがapacheなら、RewriteRuleで簡単に設定できるはず。httpd.confを覗いたら、すでにいくつかのリライトが設定されていた。それに倣うとこれでいいはず。
RewriteEngine on RewriteRule ^/NEW-SERVICE http://www\.ZZZ\.com/ja/services/NEW-SERVICE.html [L,R=301]
確かにhttp://www.zzz.com/NEW-SERVICEでアクセスできるようになったが、一応、[L,R=301]って何だったっけと思ったので、調べてみた。
Lはこのリライトルールで終了、マッチしたらもう次のルールは適用しないで終了ということ。これはいい。R=301はHTTPステータスコード301(Modified Permanently、恒久的な移動)ということ。なるほど、内部的に書き換えるわけではなく、いったんクライアントに返して、再度、正しいURLにアクセスさせるわけだ。
内部的に書き換える方法はないのか、と調べてみると、[P]というオプションがあるらしい。ということでこちらが正解。
RewriteEngine on RewriteRule ^/NEW-SERVICE http://www\.ZZZ\.com/ja/services/NEW-SERVICE.html [P]
ここに詳しい考察がありました。今回のような用途では、移動先のURLを隠す必要もないのでProxyPassReverseは不要、と判断したところで終了!