2013-03-12

Apache の mod_rewrite —— Redmine のバージョン間 URL の違いを吸収

Redmine のバージョンを大幅に上げた。

ここで一つ困ったことが発生。Redmine のバージョンが上がって、URL が変わった。変わったのはチケットを番号で指定する URL。

  • (旧) http://myserver.com/issues/show/番号
  • (新) http://myserver.com/issues/番号

ご覧の通り赤字で書いた「show」という文字列が抜けた。URL がスッキリして良くなったと思う。

問題は、過去の文書資産 — 過去メールや他のドキュメント — に旧 URL が使われていること。全ての文書の URL を直すのは大変なので、旧 URL でアクセスしたら 新 URL に自動的に移るようにした。これを URL のリダイレクトという。

Apache の rewrite 設定

まず、Apache に rewrite 用のモジュール mod_rewrte が入っているかどうかを確認。

$ sudo apache2ctl -M | grep rewrite
Syntax OK
 rewrite_module (shared)

うん、rewirte 用のモジュールが入っている (入ってない人は、頑張って入れて下さい)。

Apache の設定ファイルを変更 (追記部分を青字で書いた)。

<VirtualHost *:80>
  ServerName myserver.com
  DocumentRoot /var/redmine/public
  RewriteEngine On
  RewriteRule ^/issues/show/(.+)$ /issues/$1 [R]
</VirtualHost>

RewriteRule の末尾にある [R] はリダイレクトするための設定。このコードがないと、新しい Redmine の URL に旧 URL でアクセスできる様になる。見る分には問題ないけれど、URL をコピーする時に旧 URL をわざわざコピーさせるのはスマートじゃない。リダイレクトすると、旧 URL でアクセスすると URL は新 URL に変わる。

Apache を再起動すれば、リダイレクトが効くようになる。

あとがき

Redmine を久々にアップグレードして、その変化の大きさに驚いている。地味ながら、結構不満になったのが、今回の URL 問題。正規表現が使えると知るまでは、どうしようかと悩んだ。

No comments:

Post a Comment