我有一个处于测试阶段的站点,所以它不连接到真实数据,而是连接到数据库的本地副本。
我的客户现在需要一个快速链接来检索一些紧急和重要的pdf报告,所以我需要建立另一个链接到"真实数据"的网站版本。
我可以创建两个具有不同数据库连接的环境("本地"answers"真实"),我希望有机会通过URL选择环境(我知道从安全角度来看这不太好,但让我们想当然地认为这是理所当然的)。
所以我想使用:
my.ip.address/mysite
使用测试数据库
my.ip.address/mysite/real
使用真实数据库,重定向到没有"真实文件夹"的URL。
F.例如:/mysite/real/admin
应重定向到/mysite/admin
,但在Laravel 4上选择"真实"环境。
-
是否可以在Laravel 4中对文件夹进行模式匹配,或者仅对域进行模式匹配?换句话说,这行得通吗?
$env = $app->detectEnvironment(array( 'test' => array('*/mysite/*'), 'real' => array('*/mysite/real/*'), ));
-
如果是这样的话,我就是不知道如何编写.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
希望这会有所帮助。