1

CodeIgniter 默认只支持一个应用程序。我想要基于子域的多个应用程序。所以 subdomain 是应用程序文件夹的名称。如果存在,它应该执行 else 默认值。我的要求和逻辑在这里......

要求:

http://dynamic.com              applications/application (default)
http://appone.dynamic.com       applicatons/appone
http://apptwo.dynamic.com       applicatons/apptwo
....                            ....
http://appx.dynamic.com         applicatons/appx

当访问者键入上面的示例 URL 时,.htaccess 或 index.php 应该自动选择要使用的应用程序文件夹。

我在 index.php 中更改了 codeIgniter 默认代码并编写了这个运行良好的代码。

// multiple applications path //
$path = 'applications/';
// default folder //
$folder = 'application';

preg_match('/^(?<subdomain>\w+)\.(dynamic\.com)$/im', $_SERVER['HTTP_HOST'], $matches);
if (isset($matches['subdomain']) && is_dir($path . $matches['subdomain'])) {
    $folder = strtolower($matches['subdomain']);
}
$application_folder = $path . $folder;

我的问题 - 是否可以在 .htaccess 中编写相同的逻辑?在 index.php 中编写类似我的代码是否存在性能问题?建议我或帮助我了解 htaccess 逻辑。还附上图片。谢谢!!

在此处输入图像描述

4

1 回答 1

1

你这样做的方式是正确的。您正在设置 CodeIgniter 将在 index.php 文件中使用的应用程序文件夹。

您唯一关心的性能是您的 preg_match 函数和 is_dir 函数。在我看来,字符串相当小,不应该有太大的性能风险。但是,我会写在 switch() 语句中,以便它们更加硬编码,这样您就可以避免使用 is_dir 函数。通过使用这种方法,您还可以切换到使用 if 语句,它非常便宜,而不是 preg_match 函数。

没有理由将其写入 .htaccess 文件,CodeIgniter 使您能够执行此操作。如果您要使用 .htaccess 来使用它,则需要有单独的文件夹来安装并开始符号链接。

于 2012-07-05T14:22:21.987 回答