1

我使用具有许多子应用程序的自定义框架。我想为每个应用程序文件夹分配一个域,但遇到了问题。

Apache 虚拟主机配置

<VirtualHost *:80>
        ServerName app1.com
        DocumentRoot /var/www/framework/public/app1
</VirtualHost>

<VirtualHost *:80>
        ServerName app2.com
        DocumentRoot /var/www/framework/public/app2
</VirtualHost>

/var/www/framework/.htaccess

DirectorySlash Off

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ index.php?_ROUTE=$1 [QSA]

/var/www/framework/index.php

<?php
exit('WORKED!');

//Route request
//...

一切正常,除了它尝试使用文档根目录中的 index.php 文件,例如“/var/www/framework/public/app1/index.php”,而实际上我想使用索引文件“/var/www” /framework/index.php”。

那么如何让它使用 index.php 文件高于或相对于 .htaccess 位置的两个目录?

4

2 回答 2

1

你没有。.htaccess 只会从虚拟主机的根文件夹开始读取。

您要么需要克隆文件(丑陋,除非您使用诸如源代码存储库之类的东西将其作为外部文件提取)或将其添加到您的 vhosts 配置中。我建议只制作一个“rewrite.conf”文件并通过 vhosts 配置加载它include

虚拟主机配置:

<VirtualHost *:80>
    ServerName app1.com
    DocumentRoot /var/www/framework/public/app1
    Include rewrite.conf
</VirtualHost>
<VirtualHost *:80>
    ServerName app2.com
    DocumentRoot /var/www/framework/public/app2
    Include rewrite.conf
</VirtualHost>

重写.conf:

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ index.php?_ROUTE=$1 [QSA]

这确实有一些缺点:

  • 每次更改服务器时都需要重置服务器。
  • 如果您有很多重写,您可能希望将其保留在代码级别的某个地方......但是,我认为如果您有一个完整的解决方案,您可能需要一个不同的解决方案(如 PHP 处理程序)重写的混乱。

请注意,您也可以直接在 .htaccess 中进行相同的重写,但如果您要这样做,较低级别似乎更好。

于 2013-10-09T10:55:59.913 回答
0

您所做的本质上是一个多站点应用程序。

您应该将文档根目录设置为包含主index.php文件的文件夹。然后应该通过检查$_SERVERsuperglobal中的 HTTP 主机属性将请求路由到所需的应用程序,例如:

switch ($_SERVER['HTTP_HOST']) {
    case 'app1.com':
        include 'app1/index.php';
        // Do stuff
        break;

    case 'app2.com':
        include 'app2/index.php';
        // Do stuff
        break;
}
于 2013-10-09T10:56:43.020 回答