目標:
共有 Apache 2.2 ボックス上の仮想サーバーで、フォルダーのサブフォルダー内のファイルをルートにあるかのよう.htaccess
にシームレスに表すように構成しようとしました。public_html
つまり、ユーザーが にアクセスするとき、http://www.example.com/home
シームレスに(クライアント ブラウザーで URL を書き換えずに)からファイルを表示する必要がありますhttp://www.example.com/subfolder/home
。
私の.htaccess
ファイルは次のようになります。
RewriteEngine on
RewriteRule !^subfolder/ subfolder%{REQUEST_URI}
問題:
これは機能しますが、クライアント ブラウザの URL を書き換えます。
つまり、ユーザーはhttp://www.example.com/subfolder/home/
アドレスバーに表示されますが、表示する必要があるのはhttp://www.example.com/home
私が行ったことは.htaccess
、エンドユーザーには見えない「内部」の書き換えになるはずですが、「外部」の書き換えが行われているようです。
私は何を間違っていますか?
[編集] 追加の詳細:
ユーザーが にアクセスするwww.example.com
と、から提供されたホームページ コンテンツがユーザーに表示され、ブラウザのアドレス バーに と表示されるという点で、期待どおりに機能します。public_html/subfolder/default.html
www.example.com
ただし、ユーザーがそのホームページ (コード化されたhref="/contact"
) の「連絡先」リンクをクリックすると、そこにwww.example.com/subfolder/contact/
到達しますが、内部の書き換えではなくリダイレクトを行ったかのように、ブラウザーのアドレス バーに表示されます。
その後、アドレス バーのテキストを削除し/subfolder
てページを強制的にリロードすると、機能します。正しいコンテンツが読み込まれ、アドレス バーは残ります。www.example.com/contact/
実装上の注意:役立つ場合public_html/subfolder/contact
は、ファイルを含むフォルダーです。default.html
別の観察:
新しいタブを開いてwww.example.com/contact/
(末尾のスラッシュに注意してください)と入力すると、期待どおりに機能します。
しかし、新しいタブを開いてwww.example.com/contact
(末尾のスラッシュなし)と入力すると、 にリダイレクトされますがwww.example.com/subfolder/contact/
、これは望ましくありません。
何が悪いのか教えてくれるはずだと思いますが、答えはまだわかりません。