我有一个Laravel 4设置,如果我直接访问它可以正常工作(例如,导航到10.1.1.4
显示网站就好了。)
但是我们运行了一个nginx服务器,它将proxy_pass
向服务器发出请求。这样做的问题是proxy_pass
只会在我们去(例如)转到10.1.1.5/ttt
时执行,这将适用于初始请求,但所有资源/重定向都将被破坏(因为使用Laravel 4的url生成时缺少/ttt
。
所以我的问题非常简单。如何动态设置将重定向到的根?因此,如果您直接访问该网站,它将重定向如下:
return Redirect::to('/login');
但是如果你从nginx访问它,它将重定向到:
return Redirect::to('/ttt/login');
我已经检查了$_SERVER
变量,SERVER_NAME
保存了nginx的IP。因此,由于这将是静态的,我可以检查SERVER_NAME
是否等于nginx IP。问题是我不知道该怎么做。我应该创建一个包含“前缀”的全局变量,还是有另一种方法将/ttt
添加到每个url代?
答案 0 :(得分:0)
对于有同样问题的人,这是我的肮脏黑客:
我在public/index.php
define('REQ_NGINX', ($_SERVER['SERVER_NAME'] == '10.1.1.5')); // boolean
define('TTT_URL', 'http://' . $_SERVER['SERVER_NAME'] . (REQ_NGINX?'/ttt':'')); // without leading slash!!!
然后我将所有路线包裹在Route::group
Route::group(['prefix' => REQ_NGINX ? 'ttt' : ''], function () {
Route::get('/', 'HomeController@root');
.....
});
这将在ttt
等于REQ_NGINX
的所有路线前面加上true
字符串
然后我编辑了文件 vendor / laravel / framework / src / Illuminate / Routing / UrlGenerator.php :
在构造函数的最后,我添加了这一行:
$this->forceRootUrl(TTT_URL);
最后一步是修改.htaccess
并添加以下行 BEFORE RewriteCond
index.php
# Handle css, js, img...
RewriteCond %{REQUEST_URI} \.(css|js|png|jpg|gif|eot|svg|ttf|woff)$
RewriteRule ^ttt/(.*)$ /$1 [L]
那将剥夺ttt部分的css,js ...文件
我希望这个自我回答可以帮助将来遇到同样问题的人。一直在努力解决这个问题。不过,如果您找到了更好/更清洁的解决方案,请不要犹豫,回答这个问题。