指向*.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
,那需要在这些规则之前发生。