【问题标题】:Htaccess Rewrite to PHP File in Parent DirectoryHtaccess 重写到父目录中的 PHP 文件
【发布时间】:2013-10-09 10:44:24
【问题描述】:

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

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 位置的两个目录?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

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

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

    虚拟主机配置:

    <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>
    

    rewrite.conf:

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

    这确实有一些缺点:

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

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

    【讨论】:

    • “您要么需要克隆文件” - 要么只使用符号链接。
    • 有很多选项,符号链接就可以了。出于可移植性的原因,我不建议将其作为通用解决方案,但这只是因为我不了解有关环境的更多详细信息。
    【解决方案2】:

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

    您应该将文档根目录设置为包含主index.php 文件的文件夹。然后应该通过检查$_SERVER superglobal 中的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2015-08-04
      • 2020-04-02
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多