.htaccessですべてのアクセスをサブディレクトリへリダイレクトさせる
はじめに
ある案件の終了対応に伴い、リダイレクトの設定をしてた。
以下のアクセスを全て
example.com/finish
へリダイレクトさせるというもの。
一見簡単ですぐに終わりそうだと思っていたら結構ハマった。
ハマったところ
はじめはルートの.htaccessファイルこのように設定してみた
# .htaccess RedirectMatch /* http://example.com/finish
これの何が問題かというと http://example.com/finish へのアクセスも
/*
の条件に当てはまり
へリダイレクトされる。
これで無限loopが発生してしまい、ブラウザからエラーがはかれる。
解決策
下記の用に設定することで回避できた。
# .htaccess RewriteEngine On RewriteCond %{REQUEST_URI} !/finish RewriteRule ^(.*)$ /finish/ [R,L]
要点は2行目で、 !/finish にすることで、finishディレクトリでは リダイレクトさせないように設定した。 これで、無限loopされなくなった。
まとめ
- 別ドメインへのリダイレクトなら上記の様な方法で問題ないが、サブディレクトリとなると結構めんどう
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
posted with amazlet at 13.03.11