@Konboi memo

主に技術に関してつらつらと。

.htaccessですべてのアクセスをサブディレクトリへリダイレクトさせる

はじめに

ある案件の終了対応に伴い、リダイレクトの設定をしてた。

example.com/

以下のアクセスを全て

example.com/finish

へリダイレクトさせるというもの。

一見簡単ですぐに終わりそうだと思っていたら結構ハマった。

ハマったところ

はじめはルートの.htaccessファイルこのように設定してみた

# .htaccess

 RedirectMatch /*  http://example.com/finish

これの何が問題かというと http://example.com/finish へのアクセスも

/*

の条件に当てはまり

http://example.com/finish

へリダイレクトされる。

これで無限loopが発生してしまい、ブラウザからエラーがはかれる。

解決策

下記の用に設定することで回避できた。

# .htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !/finish
RewriteRule ^(.*)$ /finish/ [R,L]

要点は2行目で、 !/finish にすることで、finishディレクトリでは リダイレクトさせないように設定した。 これで、無限loopされなくなった。

まとめ

  • 別ドメインへのリダイレクトなら上記の様な方法で問題ないが、サブディレクトリとなると結構めんどう