【问题标题】:htaccess route multiple domainshtaccess 路由多个域
【发布时间】:2012-08-23 06:17:05
【问题描述】:

我正在启动一个项目,该项目需要使用相同的(自定义)框架从一个服务器/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]

基本上,我需要使用相同的框架为多个域复制它。

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

【问题讨论】:

    标签: .htaccess


    【解决方案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

    【讨论】:

    • 我喜欢快速,中肯的答案,你让我头疼了!另外,如果我可以 +2 您的帖子,我会这样做,因为您已经消除了对第二个 .htaccess 文件的实际需求。您的“最后一条规则中的两个条件”是每个应用程序的单个 .htaccess 文件中的内容!
    猜你喜欢
    • 2011-11-18
    • 2013-04-09
    • 2019-08-17
    • 2018-10-10
    • 1970-01-01
    • 2011-03-15
    • 2018-10-14
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多