htaccess路由多个域

时间:2012-08-22 21:51:25

标签: .htaccess

我正在启动一个项目,需要使用相同的(自定义)框架从一个服务器/ IP托管8个网站。

我需要做的是为每个网站使用单独的应用文件夹。这部分很简单,只需复制文件夹结构即可。我遇到问题的部分是.htaccess

每个应用程序文件夹的设置如下:

- application
  -controller
  -view
  -www
    -css
    -js
    -img

现在,需要进行的是需要设置文件请求才能获取它们,并且任何非文件请求都会转到单个应用程序的引导程序文件中......再次说明这部分很容易,如同我在webroot中有一个.htaccess文件,可以在请求到达后处理它。

我需要的是,在主根文件夹中,使用.htaccess根据用户访问的域来决定要转到哪个应用程序。

如果只有一个应用程序文件夹,我的htaccess重定向部分如下所示:

RewriteEngine on

RewriteCond     %{DOCUMENT_ROOT}/application/www%{REQUEST_URI} -d
RewriteRule     ^(.*[^/])$ /$1/                 [R=301,L]

RewriteRule ^$  application/www/        [L]
RewriteRule (.*)    application/www/$1      [L]
基本上,我需要使用相同的框架为多个域复制这个。

如果有任何帮助,应用程序文件夹的名称与域名相同!

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST}/www%{REQUEST_URI} -d
RewriteRule ^(.*[^/])$ /$/ [R=301,L]

RewriteRule ^$ application/www/ [L]

RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST}/www%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST}/www%{REQUEST_URI} -f
RewriteRule ^(.*)$ application/www/$1 [L]

最后一条规则之上的2个条件确保请求的资源实际存在于应用程序的www文件夹中,否则404消息将公开文件夹结构。

您可能需要使用某些规则(上面这些)规范化主机名,如下所示:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

强制主机名以 www

开头
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

从主机名中删除 www