.htaccess将子域映射到具有codeigniter框架的目录

时间:2015-07-08 07:50:12

标签: php apache .htaccess codeigniter mod-rewrite

我知道有数百万个解决方案可用于将子域重定向到目录。但我仍然面临着这个问题。

我想以下列方式映射子域

  1. demo1.example.com到demo1 dir
  2. demo2.example.com到demo2 dir
  3. 我正在使用以下代码

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /
        RewriteCond %{HTTP_HOST} ^demo1\.example\.com$
        #RewriteCond %{REQUEST_URI} !^/demo1/
        RewriteRule (.*) /demo1/$1 [L]
    
        RewriteCond %{HTTP_HOST} ^demo2\.example\.com$
        RewriteCond %{REQUEST_URI} !^/demo2/
        RewriteRule (.*) /demo2/$1 [L]
    </IfModule> 
    

    这工作正常但我在url中获取了dir名称,如demo1.example.com/demo1/ 为此,我使用了以下重写规则

    RewriteRule ^demo1/(.*)$ /$1 [L,NC,R]
    

    但无法从网址中删除demo1 我在demo1 dir中有codeigniter框架,后面有htaccess

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
    
      RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    
    
    </IfModule> 
    

1 个答案:

答案 0 :(得分:0)

如果您在每个子目录中完整安装了框架,并且您没有进行任何类型的动态映射,那么重写URL并不是最佳解决方案。

只需为每个安装创建一个虚拟主机,并相应地设置服务器名称。

<VirtualHost *:80>
  DocumentRoot /var/www/example.com/demo1
  ServerName demo1.example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/example.com/demo2
  ServerName demo2.example.com
</VirtualHost>

根据您使用的托管类型,您可以在托管管理后端创建虚拟主机,或查看Apache 2.2 docs以获取更多信息。

相关问题