2008年7月30日

[Apache-Users 7092] Re:mod_rewrite にて / への全てのアクセスを /bv/ へリダイレクトさせる方法

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

田中@tyukio.netです。
なんか目が覚めちゃいました

Tyukio さんは書きました:
> ただ

> http://example.com/bv/ に対し
> http://example.com/bv でアクセスした場合
> logを見ると
> "GET /bv HTTP/1.1" 301  と一旦301を返し
> "GET /bv/ HTTP/1.1" 200 と成っているようなので
> そのへんRewriteの動作に、どう影響するのか判りませんでした物で、、、

 これについて実験してみました。
結論から言いますと(私の実験が間違えていなければですが)
リダイレクトで (R無しのURL置き換えだと実験がやりづらいです)
http://example.com/bv でアクセスした場合を考慮すると

RewriteCond %{REQUEST_URI} !^/bv($|/|\?)
RewriteRule ^(.*)$ /bv/$1 [R,L]

とするか Tietewさんの書かれた方法だと
RewriteRule ^(?!bv(/|$|\?))(.*) /bv/$1 [R,L]
としないと上手くいかないみたいです。

実験方法:
http://fedora.example.lanhost/ でアクセスできるように
  ネームベースVirtualHostを設定
http://fedora.example.lanhost/bv/ のサブディレクトリを作る
3..htaccessに
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/bv/
RewriteRule ^(.*)$ /bv/$1 [R,L]
 と記述してから linuxのコマンドラインより
$ telnet localhost 80
 中略
GET /bv HTTP/1.1
Host: fedora.example.lanhost

 結果(応答ヘッダの抜粋)
HTTP/1.1 302 Found
Server: Apache/2.2.8 (Fedora)
Location: http://fedora.example.lanhost/bv/bv
 と成ってしまいます
 これでは駄目ですね
 ブラウザで http://fedora.example.lanhost/bv
  にアクセスするとエラーに成ります

4. .htaccess より先ほどの記述をコメントアウトして
RewriteEngine on
RewriteRule ^(?!bv/)(.*) /bv/$1 [R,L]
 と記述して 3.と同じアクセスすると
 やはり
Location: http://fedora.example.lanhost/bv/bv が返されちゃいます
 ブラウザでもエラーです

5..htaccessに今度は
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/bv($|/|\?)
RewriteRule ^(.*)$ /bv/$1 [R,L]
 とします 結果は
HTTP/1.1 301 Moved Permanently
Location: http://fedora.example.lanhost/bv/
 と成ります。これは正しい反応です。
 ブラウザでも
http://fedora.example.lanhost/bvhttp://fedora.example.lanhost/bv/
 と正しくアクセス出来ます。

6. 次に
RewriteEngine on
RewriteRule ^(?!bv(/|$|\?))(.*) /bv/$1 [R,L]
 とします。結果は 5.と同じく正しい反応になりました。

##実験方法や結果についておかしな点があればご指摘ください。
--
入退会・変更・配送一時停止は以下へ
http://mm.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2008年7月30日 03:56
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/75810
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。