0

次のことを可能にするApache構成を探しています。

  • sub.domain.comを、として提供/%docRoot%/domain.com/subし、
  • すべてのホストされたドメインとすべてのサブドメインに対してこれを行うことができます(つまり、ドメインごとの仮想ホスト構成はありません)

mod_rewrite特に(を使用して)関与していなかった場合は、どんな解決策にも感謝しますmod_vhost_alias

注:を使用した明らかな解決策がいくつかありますがmod_vhost_alias、それらはdomain.comまたはsub.domain.comのいずれかで機能し、どちらも両方のケースをカバーしていないようです。

良い1日を!

4

1 に答える 1

1

*.domain.comドキュメント ルート ( ) をポイントします/%docRoot%/。これは vhost 構成で行う必要があります。その同じ vhost で、これを追加します。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/domain.com/
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^/(.*)$ /domain.com/%1/$1 [L]

を指さないようにしたい場合はwww.domain.com/%docRoot%/domain.com/wwwそれを除外する条件を追加します。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/domain.com/
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^/(.*)$ /domain.com/%1/$1 [L]

編集:

ホストされているドメインごとにこれを行う必要があると思います(投稿した例はすべて「domain.com」を参照しているため)。私は正しいですか?

はい、上記は のルーティングのみを行いdomain.comます。これをすべての任意の に対して行いたい場合domain.comは、もう少しトリッキーなことをする必要があります。

RewriteEngine On
# here, %1 = subdomain name, and %2 = domain name
RewriteCond %{HTTP_HOST} ^([^\.]+)\.(.+)$ [NC]
# make sure the request doesn't already start with the domain name/subdomain name
RewriteCond %{REQUEST_URI}:%2/%1 !^/([^/]+/[^/]+)[^:]*:\1
# rewrite
RewriteRule ^/(.*)$ /%2/%1/$1 [L]

ここで難しいのは%{REQUEST_URI}:%2/%1 !^/([^/]+/[^/]+)[^:]*:\1マッチです。条件を仮定し、後方参照を使用して(%2/%1 を使用して以前の一致から後方参照された)で始まらない%{REQUEST_URI}:domain.com/subことを確認します。%{REQUEST_URI} domain.com/sub\1

これにより、すべてのドメイン(デフォルトの仮想ホスト)を受け入れるように仮想ホストをセットアップすると、サブドメイン/ドメインがルーティングされます。例:

  • http://blah.bleh.org/file.txtに行く/%docRoot%/bleh.org/blah/file.txt
  • http://foo.bar.com/some/path/に行く/%docRoot%/bar.com/foo/some/path/
  • http://sub2.sub1.d.com/index.htmlに行く/%docRoot%/sub1.d.com/sub2/index.html

EDIT2:

はい、domain.com をルーティングしたいです。/%docRoot%/domain.com/

これらを試してください:

RewriteCond %{HTTP_HOST} ^(.+?)\.([^\.]+\.[^\.]+)$ [NC]
RewriteCond %{REQUEST_URI}:%2/%1 !^/([^/]+/[^/]+)[^:]*:\1
RewriteRule ^/?(.*)$ /%2/%1/$1 [L]

RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$ [NC]
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)[^:]*:\1
RewriteRule ^/?(.*)$ /%1/$1 [L]

基本的には同じですが、いくつかの正規表現を微調整して adomain.comsub.domain.com. にリダイレクトwww.domain.comする場合は、これらのルールの前にdomain.com行う必要があります。

于 2012-08-08T19:09:04.713 に答える