0

現在の共有ホスト構成でいくつかの煩わしさを修正しようとしていますが、すべてを希望どおりにセットアップする際にいくつかの問題が発生しています。

現在、私は次のフォルダ構造を持っています:

/
/.htaccess
  /example
  /example1
  /example2
  /example3

共有ホストでは、ルートディレクトリを指すようにプライマリドメインが自動的に設定されます。プライマリドメインをサブドメインにポイントするために、ルートファイルの.htaccessに次のものを追加しました。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{REQUEST_URI} !^/example/
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /example/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ example/ [L]

これにより、URLが適切に書き換えられ、example.comにアクセスすると/example/サブディレクトリのコンテンツが表示されます。問題は、ルートのサブディレクトリが同じように書き直されていないことです。これは、私が実現したいと思っていた機能ではありません。例:

http://www.example.com/            = /example
http://www.example.com/example/    = /example
http://www.example.com/example1/   = /example1
http://www.example.com/example2/   = /example2
http://www.example.com/example3/   = /example3

私がしたいことは次のとおりです。

http://www.example.com/            = /example
http://www.example.com/example/    = /example/example
http://www.example.com/example1/   = /example/example1
http://www.example.com/example2/   = /example/example2
http://www.example.com/example3/   = /example/example3

何が起こるべきかについての私の理解は次のとおりです。

  1. http://www.example.comのリクエストを受け取りました。
  2. 最初の条件が一致しません。HTTP_HOSTが^example.com$と一致しません
  3. 2番目の条件:^www.example.comに一致
  4. 3番目の条件:REQUEST_URIがないため、一致しない^ / example /
  5. 4番目と5番目:これらを使用した場合と使用しない場合を試しましたが、結果は変わらないようです。私の理解では、これらの行にコメントがない場合、今すぐに使用する前に不要なものが表示されます(ファイル名とディレクトリが存在する場合、書き換えは行われません)。
  6. リクエストをexample.com/example/に書き直します
  7. 6番目の条件:URLを特定のドメインに一致させます。
  8. このURLに/example/サブディレクトリを使用するように常に書き直してください。

これは機能しているように見えますが、 http://www.example.com/example2/にアクセスしようとすると、問題が発生します。REQUEST_URIが/example/と一致しないので、/ example / example2に書き換える必要があると思いましたが、それは明らかに起こりません。

Apache構成にアクセスできないか、VirtualHostsをセットアップする機能がないため、.htaccessルールを使用してこれを実行できる方法があることを期待しています。私がこの単純なタスクをどのように複雑にしすぎているかについての洞察は、非常に役立ちます。

4

1 に答える 1

0

私が知る限り、ルート内のディレクトリが入ってくる要求と一致した場合、ルート内の .htaccess ファイルは無視されていました (つまり、example1 がルート ディレクトリに存在し、RewriteCond を配置して /example1 を書き換えます)。エラー ページはトリガーされませんでした)。

これに対する私の解決策は、私が望んでいたよりも少しエレガントではありませんでしたが、うまくいっているようです. うまくいけば、この問題に遭遇した他の人を助けることができます.

example1、example2、および example3 ディレクトリ内で、.htaccess ファイルを変更して、次の内容を含めました (ディレクトリに基づいて example1 を変更)。

RewriteCond %{HTTP_HOST} ^(www\.)example\.com$ [NC]
RewriteRule ^(.*)$ /example/example1/$1 [L]

これにより、メイン ドメインは、ルートに一致するディレクトリが存在する場合でも、作成したサブディレクトリ内にあるコンテンツを提供するようになります。

于 2012-08-05T00:16:59.157 に答える