2012-04-12 17 views
1

私のプロジェクトの1つでは、.htaccessを使ってリダイレクトしようとしています。私はこのようなリダイレクトを使用しています:.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内部サーバーエラーを取得します。

私は数時間前から検索していますが、特定のフォルダの例外を追加する方法を示す例を見つけるのに少し疲れていますが、このトラフィックを別のフォルダにリダイレクトする方法は示しません。私が間違ってやっていることを教えてください。

答えて

5

RewriteCondは、の直下の規則にのみ適用されます。言い換えれば、あなたの例では、空のパスルールにのみ適用されます。 RewriteCondを1つ下に移動すれば、より効果的です。

RewriteRule ^$ public/ [L] 

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

はまた、私はあなたのルール

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

が奇数であることがわかりました。 /adminsomethingのようなURLは、あなたが望むとは思わない/admin/somethingに書き換えられます。

リダイレクトを書き換えることが混乱しています。書き換えとは、リクエストを内部的に書き換え、解釈を異ならせるルールです。リダイレクトは、訪問者のブラウザに別のアドレスに行くように指示するルールです。どちらをやっていますか?

のリダイレクトのマジックキーワードはR=301です。これは、httpコード301 Moved Permanentlyでリダイレクトすることを意味します。たとえば、次のように試してみるとよいでしょう。

# 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] 
+0

管理者の問題は、単にタイプミスです。私はスラッシュを忘れた。私はRewriteCondを1つのルールの下に移動し、すべてがうまくいくように動作します。私は書き換えルールを探していたと思います。なぜなら、内部的に書き換えられるべきだからです。 –

関連する問題