0

/foo/index.html経由でアクセスしたいファイルがある場合/bar/index.htmlは、書き直せば簡単です:

RewriteRule ^bar/(.*)$    foo/$1 [L] # <-- Leaves URL the same, but gives content of foo/

しかし、それはコンテンツにアクセスするために/foo/index.htmlと現在の両方が機能することを意味します。/bar/index.html経由のアクセスを禁止する方法はあります/foo/index.htmlか? ただやっている:

RewriteRule ^foo/(.*)$    bar/$1 [R=301,L] # <-- Change the URL if accessed via /foo
RewriteRule ^bar/(.*)$    foo/$1 [L] # <-- Leaves URL the same, but gives content of foo/

リダイレクト ループが発生します。「URL が既に '/bar' でない限り、foo を bar にリダイレクトする」ことを示す方法はありますか?

4

1 に答える 1

0

%{THE_REQUEST}ええ、しかし、そうしないと、2 つのルールが互いの書き換えを変更し続けてループするようなものに対してチェックを行う必要があります。次のようなものです:

# this is the rule you already had:
RewriteRule ^bar/(.*)$    foo/$1 [L]

# this is the rule that externally redirects
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /foo/
RewriteRule ^foo/(.*)$ /bar/$1 [L,R=301]

%{THE_REQUEST}変数に対するチェックにより、実際のリクエストが に対して行われたもの/fooであり、内部的に書き換えられたリクエストではないことが保証されます。

于 2012-10-30T20:05:29.703 に答える