指向*.domain.com您的文档根目录 ( /%docRoot%/)。您需要在虚拟主机配置中执行此操作。在同一个虚拟主机中,添加以下内容:
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比赛。它提出条件:%{REQUEST_URI}:domain.com/sub并确保%{REQUEST_URI} 不使用反向引用以domain.com/sub(使用 %2/%1 从先前的匹配\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
编辑2:
  是的,我非常希望将 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,那需要在这些规则之前发生。