Division By Zero

ゼロで割る

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は不要、と判断したところで終了!