Redirect with Location/Directory
- RedirectディレクティブはLocationやDirectoryよりも先に評価されるようなので注意
- 次のような設定では、「/jump/inner/hoge」にアクセスすると、認証をせずにいきなりexample.comにリダイレクトされてしまう
<Location /jump> AuthType Basic AuthName "Authentication for jump" AuthUserFile /path/to/passwd/htpasswd.file Require valid-user </Location> RedirectMatch ^/jump/inner/(.*)$ https://example.com/inner/service/$1
- RedirectMatchをLocation内に記述すればよい
- 次のような設定では、「/jump/inner/hoge」にアクセスすると、認証をせずにいきなりexample.comにリダイレクトされてしまう
Redirect and Rewrite URL
- http://httpd.apache.org/docs/mod/mod_alias.html#redirect
- http://httpd.apache.org/docs/mod/mod_rewrite.html
- Pictnotes » RedirectMatch のリダイレクト先URLで、&(アンパサンド)がある場合
- RedirectMatch のリダイレクト先のURLの中に、&(アンパサンド)がある場合、置換されてしまう。
RedirectMatch ^/test/? http://www.pictnotes.jp?param1=hoge¶m2=fuga ↓ RedirectMatch ^/test/? http://www.pictnotes.jp?param1=hoge/test RedirectMatch ^(/test/?) http://www.pictnotes.jp?param1=hoge¶m2=fuga ↓ RedirectMatch ^(/test/?) http://www.pictnotes.jp?param1=hogeparam2=fuga (&が消えている状態)
- &を使うためには、エスケープしてあげればOK
RedirectMatch ^(/test/?) http://www.pictnotes.jp?param1=hoge\¶m2=fuga & -> \&
- RedirectMatch のリダイレクト先のURLの中に、&(アンパサンド)がある場合、置換されてしまう。
- クエリー付のリダイレクトは「mod_rewrite」を使うべし : Project MultiBurst
- 以下のようにクエリーがついたURLを、すべて一つのURLにリダイレクトしようとすると、「Redirect」と「RedirectMatch」では無理なようです。
Redirect /abc/ /def/index.php RedirectMatch /abc/(.*)$ /def/index.php
- そもそも、「mod_alias」がクエリーまで扱っていないそうな。。なので、
/abc/test.cgi?no=1&id=2
- というリクエストが来ても、
/def/index.php?no=1&id=2
- という風にリダイレクトされてしまう。ということで、こういう場合は、「mod_rewrite」を使うとよい。
- こんな感じ
RewriteEngine On RewriteRule /abc/(.*)$ /def/index.php [R=301,L]
- こうすることにより、クエリーはすべて破棄される。
- 以下のようにクエリーがついたURLを、すべて一つのURLにリダイレクトしようとすると、「Redirect」と「RedirectMatch」では無理なようです。
Last modified 14 years ago
Last modified on Dec 20, 2010 2:38:33 AM