将子域指向子目录

时间:2015-06-08 04:58:58

标签: php .htaccess redirect laravel-5

使用Laravel我将php页面生成到名为webpage的子目录中。我想允许用户使用子域访问页面。例如,我在whoami.php目录中生成了一个文件webpage。如果有人试图访问whoami.domain.com,他可以看到whoami.php。我在index.php内创建了webpage,它可以提取别名并显示文件。我需要的是将子域传递给index.php文件而不重定向。我写了htaccess如下

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    #sub domain custom part
        RewriteCond %{HTTPS} off
        RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
        RewriteRule ^(.*)$ http://domain.com/webpage/%1/$1 [L,NC,QSA]
</IfModule>

但我正在重定向到http://domain.com/webpage/whoami

我试图清楚地表达我的要求并粘贴我尝试过的东西。能帮我解决一下吗?

编辑1 根据@ Starkeen的回答,我在重定向循环(http://whoami.domain.com/webpage/whoami/webpage/whoami/......)中尝试了以下代码。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

        #sub domain
        RewriteCond %{HTTPS} off
        RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$
        RewriteRule ^(.*)$ /webpage/%1/$1 [L,NC,R]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

</IfModule>

2 个答案:

答案 0 :(得分:1)

要将子域重定向到子文件夹,您可能需要在&#34; RewriteEngine On&#34;之后放置以下内容。 line:

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

答案 1 :(得分:0)

我得到了一个简单的解决方案。当我使用Laravel并且已经使用$link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $link = str_replace(array('http://', 'https://', 'www.'), '', $link); $splitted = explode(".", $link); if($splitted[0] != 'domain'){ $file_name = $splitted[0].'.php'; $file_loc = 'webpage/'.$file_name; if(file_exists($file_loc)) { include($file_loc); } else { header('Location: http://domain.com/not-found'); } die(); } 作为引导程序时,我在那里编写了一些PHP代码来实现我的目标。你们可以根据需要使用。如果我的解决方案不够好,请告诉我。感谢

我的解决方案

public static void aMethodCaller(){
 if (_frmMain.InvokeRequired)
   _frmMain.Invoke(new Action(aMethod));
 else
   aMethod();
}