如何使用.htaccess在Laravel 4中选择环境


How to select environment in Laravel 4 using .htaccess?

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

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

我可以创建两个具有不同数据库连接的环境("本地"answers"真实"),我希望有机会通过URL选择环境(我知道从安全角度来看这不太好,但让我们想当然地认为这是理所当然的)。

所以我想使用:

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

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

F.例如:/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
    

但这行不通。

我不确定Laravel的内部环境处理是否适用于文件夹,但它肯定适用于子域。你可以选择使用两个Apache vhosts来设置你的应用程序,一个名为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'];
});

另一个选项:

在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

希望这会有所帮助。