2012-01-15 7 views
2

すべての着信リクエストをサブディレクトリにリダイレクトしたいのですが、どのようにするかわかりません。私はhereを見たが、それは私のために働かなかった。すべてのリクエストをサブディレクトリに処理するApache mod書き換えルールを作成します。

だから、誰かがwww.example.com/testを訪れた場合、私はそれがにリダイレクトしたい:www.example.com/test/subdirectoryが、URLはまだwww.example.com/test

にする必要があり、私はまた、例えばwww.example.com/test/index.php?action=homewww.example.com/test/subdirectory/index.php?action=homeにリダイレクトする必要があり、パラメータが動作する必要があります。

誰かが私を助けてくれることを願っています!

答えて

1

実際にあなたが求めているのはリダイレクトではありません。

リダイレクトとは、Webサーバーがサブディレクトリを含む新しいURLを送信すると、ブラウザはこの新しいURLを要求し、ブラウザのURLバーに表示します。

あなたが望むのは、ディレクトリ構造を実際のディレクトリ構造とは別にマップすることです。これはApacheがAlias命令で簡単にできることです。 Mod-rewriteは、RewriteRulesに[R]タグが含まれていない状態でも、リダイレクトHTTP応答ではなく内部書き換えを意味します。 [QSA]タグは、書き換えられたURLに現在のクエリ文字列パラメータを保持するようにmod-rewriteに指示します。しかしMod-rewriteは理解するのが簡単ではなく、基本的にAliasの問題は簡単です(ほとんどの場合、mod-rewriteよりも頻繁にApacheに含まれます)。

これは大丈夫でなければなりません:

Alias /test /test/subdirectory 
+0

こんにちは、私はあなたの答えをありがとう、本当に感謝します!私はエイリアスの存在を知らなかった。私は自分の答えを自分の質問に対する正解としました。今私はエラーが表示されます:エイリアスはここで許可されていません。しかし、私はそれが私のホスティングの許可設定によると思う。 – user969124

+3

'エイリアス'ディレクティブは '.htaccess'ファイルで使用できません。メインサーバーの設定または仮想ホストのいずれかにする必要があります。 – dave1010

1

サイトのルートディレクトリにある.htaccessファイルに次の行を追加してみてください。 クエリ文字列パラメータはデフォルトで渡されます。

RewriteEngine on 
RewriteBase/

#if not an existing file or directory 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# rewrite to subdirectory 
RewriteRule ^(.*)(/[^/]+)?$ /$1/subdirectory/$2 [L,QSA] 
+0

こんにちはウルリッヒPalha。あなたのanwersありがとう! – user969124