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/
と評価され、書き換えルールを実行しなくても要求が成功します。
私はこれを動作させることに非常に近いと感じています。どんな助けもありがとうございます。
内部リダイレクトを防ぐために、以下のようにルールの最初のセットの前にパーフェクトを以下のRewriteCondを追加します!どうもありがとうございます。それがトリックでした。私はあなたができるようにすぐにあなたの答えを受け入れるよ。 – Crashspeeder