3

我有一个处于测试阶段的站点,因此它连接的不是真实数据,而是数据库的本地副本。

我的客户现在需要一个快速链接来检索一些紧急和重要的 pdf 报告,所以我需要设置另一个版本的网站来链接到“真实数据”。

我可以创建具有不同数据库连接的两个环境(“本地”和“真实”),并且我想提供通过 URL 选择环境的机会(我知道从安全的角度来看这并不漂亮,但让我们采取这是理所当然的)。

所以我想使用:

my.ip.address/mysite使用测试数据库

my.ip.address/mysite/real使用真实的数据库,重定向到没有“真实文件夹”的 URL。

F.ex.:/mysite/real/admin应该重定向到/mysite/admin但选择 Laravel 4 上的“真实”环境。

  1. 是否可以对 Laravel 4 中的文件夹进行模式匹配,还是仅适用于域?换句话说,这行得通吗?

    $env = $app->detectEnvironment(array(
        'test' => array('*/mysite/*'),
        'real' => array('*/mysite/real/*'),
    ));
    
  2. 如果是这样,我只是不知道如何编写 .htaccess 规则,我试过了

    RewriteRule ^/real(.*)$ $1
    

但它不会起作用。

4

2 回答 2

5

我不确定 Laravel 的内部环境处理是否适用于文件夹,但它肯定适用于子域。你可以选择使用两个 Apache 虚拟主机来设置你的应用程序,一个是命名的test.example.local,一个是命名real.example.local的,然后在 Laravel 中设置环境选项,如下所示:

$env = $app->detectEnvironment(array(
    'test' => array('test.example.local'),
    'real' => array('real.example.local'),
));

还有一个使用 .htaccess 的选项:您可以在 .htaccess 中设置它...

SetEnv LARAVEL_ENVIRONMENT test
SetEnv LARAVEL_ENVIRONMENT real

然后你可以像这样在 Laravel 中设置你的环境:

$env = $app->detectEnvironment(function()
{
    return $_SERVER['LARAVEL_ENVIRONMENT'];
});
于 2013-08-10T12:54:07.873 回答
0

另外的选择:

在 bootstrap/start.php 中添加以下代码

putenv('LARAVEL_ENV=production');

$env = $app->detectEnvironment( function()
{
    return getenv('LARAVEL_ENV') ?: 'staging';
});

注意:如果此文件中已经提到了“detectEnvironment”,请替换它。

请记住,这种方法将使每个环境都可以生产。为了克服这个在 .htaccess 文件中设置环境变量

句法:SetEnv VAR_NAME "var_value"

SetEnv LARAVEL_ENV production

希望这会有所帮助。

于 2015-10-30T08:28:08.220 回答