1

私のプロジェクトの1つで、.htaccessを使用してリダイレクトしようとしています。私は次のようなリダイレクトを使用しています:

RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

しかし、今度は書き換えルールに例外を追加したいと思います。http://example.com/admin/を同じ方法でリダイレクトし、別のディレクトリにのみリダイレクトしたい。他のすべてのトラフィックは、引き続きパブリックディレクトリに移動する必要があります。だから私はこのような書き換え条件を追加しました:

RewriteCond %{REQUEST_URI} !/admin/
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

これはうまくいきませんでした。まだパブリックフォルダにリダイレクトされています。私もこれを試しました:

RewriteRule ^admin$ admin/ [L]
RewriteRule admin(.*) admin/$1 [L]

RewriteCond %{REQUEST_URI} !/admin
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

これは事態を悪化させるだけでした。500内部サーバーエラーが発生します。

私は今何時間も検索していて、特定のフォルダの例外を追加する方法を示す例を見つけるのに少しうんざりしていますが、このトラフィックを別のフォルダにリダイレクトする方法を示していません。私が間違っていること、または私が試すことができる他のアプローチを教えてください。

4

1 に答える 1

5

Aは、その直下のルールにRewriteCondのみ適用されます。つまり、あなたの例では、空のパス ルールにのみ適用されます。1ノッチ下げると、よりうまく機能します。RewriteCond

RewriteRule ^$ public/ [L]

RewriteCond %{REQUEST_URI} !/admin/
RewriteRule (.*) public/$1 [L]

さらに、私はあなたのルールを見つけます

RewriteRule admin(.*) admin/$1 [L]

奇妙なこと。のような URLは、あなたが望むものではないと思いますが/adminsomething、書き換えられます。/admin/something

さらに、 rewriteredirectを混同していると思います。書き換えとは、リクエストを内部的に書き換え、別の方法で解釈するルールです。リダイレクトは、訪問者のブラウザに別のアドレスに移動するように指示するルールです。あなたはどちらに行きますか?

リダイレクトの魔法のキーワードは、 http コード 301 Moved Permanently によるリダイレクトR=301意味します。たとえば、試してみたいことがあります...

# This first rule is actually redundant in this case so skip it...
#RewriteRule ^$ public/ [R=301,L]
RewriteCond %{REQUEST_URI} !/admin
RewriteRule (.*) public/$1 [R=301,L]
于 2012-04-12T13:44:29.673 に答える