*.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.com
とsub.domain.com
. にリダイレクトwww.domain.com
する場合は、これらのルールの前にdomain.com
行う必要があります。