mk_5884 Programming

自分で調べたIT関連のことなどを書いています

Zendframework のリライト設定

Zendframeworkで開発をしていて、
リダイレクト対応をするために.htaccessを編集することになった。
やりたいことは以下。

1.
http://old.co.jp/game/ でアクセス

http://new.co.jp/game/ に飛ばす

2.
1. 以外にアクセス

http://old.co.jp/infomation/ に飛ばす

で、以下の様に設定したら駄目だった。

#gameはリダイレクト対象から外す
RewriteCond %{REQUEST_URI} !(^/game/)
#infomationはリダイレクト対象から外す(無限ループするから)
RewriteCond %{REQUEST_URI} !(^/infomation/)
#上のルール以外はhttp://old.co.jp/infomation/ に301リダイレクト
RewriteRule ^.*$ http://old.co.jp/infomation/ [R=301,L]
#gameの場合はhttp://new.co.jp/game/ に301リダイレクト
RedirectMatch 301 ^/game/(.*)$ http://new.co.jp/game/

なにがダメかと言うと、http://old.co.jp/infomation/ がnotfoundになる。

Zendframworkは必ずindex.php を経由して色々なコントローラに飛ばすので、
全てをリダイレクトさせる今、index.php も無効になり、直でinfomation に飛ばすことが出来なくなるのだ。

なので、

#gameはリダイレクト対象から外す
RewriteCond %{REQUEST_URI} !(^/game/)
#上のルール以外はindex.php に飛ばす
RewriteRule ^.*$ index.php [NC,L]
#gameの場合はhttp://new.co.jp/game/ に301リダイレクト
RedirectMatch 301 ^/game/(.*)$ http://
new.co.jp/game/

これで、index.phphttp://old.co.jp/infomation/ れリダイレクトさせる処理を書いた。

かなり迷ったけど、これでいけそう。