2

私はウェブの世界では初心者なので、申し訳ありません... SOや他の場所で見つかった多くのことを試しましたが、やりたいことができませんでした。そして、Apache のドキュメントは... 完成度が高すぎます。

基本的に私がやりたいことは、ドメインをサブフォルダーにリダイレクトすることです。これに対する簡単な解決策を見つけました(実際には多くの異なる)。

http://www.foo.com/
http://foo.com/

にリダイレクトし、次のように表示する必要が/barありますhttp://foo.com/

以下を使用して、期待される結果を得ました:

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.foo.com$
RewriteRule ^/?$ "http\:\/\/foo.com" [R=301,L]
RewriteRule ^((?!bar/).*)$ bar/$1 [NC,L]

ただし、明示的に入力したときにサブフォルダーとファイル名が表示されないようにしたい、つまり:

http://www.foo.com/index.html
http://foo.com/index.html
http://wwww.foo.com/bar
http://foo.com/bar
http://wwww.foo.com/bar/index.html
http://foo.com/bar/index.html

すべてが次のように表示されるはずです

http://foo.com/

これは可能ですか?

私は仮想ホスト上にいるので、明らかに.htaccessを使用しています。

ありがとう

4

1 に答える 1

0

Felipe が言うように、R=301 リダイレクトを行うと情報が失われるため、実際には不可能です。このようなハード リダイレクトは、前のリクエストの記憶がなく、まったく新しいリクエストを開始します。

もちろん、同様のことを行う方法はあります。最も簡単な方法は、元のリクエストをクエリ文字列に入れることです ( mod_rewriteがクエリ文字列でどのように機能するかについての概要を説明します)。確かに、クエリ文字列は URL に表示されますが、最新のブラウザーのほとんどはアドレス バーにクエリ文字列を非表示にしているため、目的が美学である場合は、この方法が有効です。

URL に元のクエリをまったく表示したくない場合は、CO フラグを使用して Cookie を使用できます( Cookie 操作に関する非常に良い例をいくつか示します) いずれにせよ、元のリクエストに関する情報は、何らかの方法でハード リダイレクトで渡す必要があります。

しかし、とにかく、そして最も重要なことに、なぜこのようなことをしたいのでしょうか? 人間もロボットも混乱するに違いない。フレームがファッショナブルだった頃、非常に多くのページがこのように動作し、かなりひどかった (ブックマークなし、コンテンツへの簡単なリンクなし、Google の検索結果には「お使いのブラウザはフレームを処理できません」というスニペット、リロードなし、不規則な [戻る] ボタン、おお、少年、そんな日々でした)。

そういえば、コンテンツが html の場合は、単純な古い iframe を使用して効果を得ることができます (しかし、私はそれを避けることを心からお勧めします)。

于 2012-12-16T23:19:44.860 に答える