2011-03-26 115 views
11

HOWTO与htacess做出这样的:htaccess的子域

subdomain.domain.com -> domain.com/subdomain (no redirect on client side) 
domain.com/subdomain -> subdomain.domain.com (redirect) 

我做冷杉重定向:

RewriteRule ^subdomain/ - [L] 
RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC] 
RewriteRule (.*) subdomain/$1 [L] 

它的形式htacess如何插入:

AddDefaultCharset utf-8 
DirectoryIndex index.php index.html index.htm 
Options All -Indexes 
ErrorDocument 404 /404.html 
ErrorDocument 403 /404.html 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^domain.com 
RewriteRule (.*) http://www.domain.com/$1 [R=301,L] 
RewriteCond %{REQUEST_URI} !\.(png|jpg|jpeg|gif)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)$ index.php/$1 [QSA] 
+0

是否有多个子域? – 2011-03-26 23:13:33

+0

目前没有 – Makigator 2011-03-26 23:16:53

回答

9

这是一个通配符因此它适用于任何数量的子域。

这将重定向domain.com/foo/barfoo.domain.com/bar

RewriteCond %{HTTP_HOST} ^domain.com$ [NC] 
RewriteRule ([^/]+)(/.*|$) $1.domain.com/$2 [R=302] 

这将处理(内部重写)虚拟主机:

RewriteCond %{HTTP_HOST} ^(.*).domain.com$ [NC] 
RewriteRule (.*) %1/$1 [L] 

您可以考虑使用,而不是302 301(永久重定向)。

我强烈建议您有一个VirtualHost为您的主站点domain.comwww.domain.com,另有一个用于处理虚拟子域。

仅适用于特定的子域:

RewriteCond %{HTTP_HOST} ^domain.com$ [NC] 
RewriteRule (subdomain)(/.*|$) $1.domain.com/$2 [R=302,L] 

RewriteCond %{HTTP_HOST} ^(subdomain).domain.com$ [NC] 
RewriteRule (.*) %1/$1 [L] 
+0

我认为他必须在他的cPanel中添加* .domain.com子域名或这样才能工作。 – 2011-03-26 23:24:10

+0

我不断编辑答案。是的,在某个时刻,必须在'VirtualHost'中有一个'ServarAlias * .domain.com'。 – vbence 2011-03-26 23:26:35

+0

谢谢你,好决定。它是如何完成的,但仅限于具有特定名称的子域(即,仅有一个子域名为1) – Makigator 2011-03-26 23:31:56