2012-02-14 5 views
1

mod_rewriteを使用して、リクエストを123.example.com/456/file.htmlからexample.com/123/456/file.htmlにリダイレクトしようとしています。新しいディレクトリは即座に作成できるため、書き換えが必要です。私はそれを理由づけようとしましたが、実際の解決策には出てこないようです。私は以下の書き換えルールを使用している場合サブルートとしてdocrootのサブディレクトリを提供するmod_rewrite

まず、私が得る404のすべてが正常に二番目のルールを実行するため、内部リダイレクトし、再びルールを実行するように進み、それが123/123/456/file.htmlを探しているので、最初のルールが一致ため、

RewriteCond %{HTTP_HOST} ^(\d+)\. 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d [OR] 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f 
RewriteRule (.*) /%1/$1 [L] 

RewriteCond %{DOCUMENT_ROOT}/$1 !-d 
RewriteCond %{DOCUMENT_ROOT}/$1 !-f 
RewriteRule ^(.*)$ - [R=404,L] 

それほとんど作品:私は最後のように404を移動させる場合は404

RewriteCond %{HTTP_HOST} ^(\d+)\. 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-d 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-f 
RewriteRule (.*) - [R=404,L] 

RewriteCond %{HTTP_HOST} ^(\d+)\. 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d [OR] 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f 
RewriteRule (.*) /%1/$1 [L] 

を引き起こして、私は次の取得しますあなたが123.example.com/123/と入力すると、無効にする必要がありますが、404は表示されません。最初のルールによってパスが書き換えられなかったため、無効なパス123/123/の代わりにが123/と評価され、書き換えルールを実行しなくても要求が成功します。

私はこれを動作させることに非常に近いと感じています。どんな助けもありがとうございます。

答えて

1

#prevent internal redirects 
RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteCond %{HTTP_HOST} ^(\d+)\. 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-d 
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-f 
RewriteRule (.*) - [R=404,L] 
+0

内部リダイレクトを防ぐために、以下のようにルールの最初のセットの前にパーフェクトを以下のRewriteCondを追加します!どうもありがとうございます。それがトリックでした。私はあなたができるようにすぐにあなたの答えを受け入れるよ。 – Crashspeeder

関連する問題