【问题标题】:Set Route root if request comes from specific IP如果请求来自特定 IP,则设置路由根
【发布时间】:2016-11-14 05:14:38
【问题描述】:

我有一个 Laravel 4 设置,如果我直接访问它就可以正常工作(例如,导航到 10.1.1.4 显示该网站很好)。

但是我们有一个 nginx 服务器正在运行,它将向服务器发出 proxy_pass 请求。这样做的问题是proxy_pass 只会在我们去(例如)去10.1.1.5/ttt 时执行,这将适用于初始请求,但所有资源/重定向都会被破坏(因为缺少/ttt在使用 Laravel 4 的 url 生成时。

所以我的问题很简单。如何动态设置将重定向到的根?因此,如果您直接访问该网站,它将像这样重定向:

return Redirect::to('/login');

但是如果你从 nginx 访问它,它会重定向到:

return Redirect::to('/ttt/login');

我已经检查了$_SERVER 变量,SERVER_NAME 保存了 nginx 的 IP。因此,由于这将是静态的,我可以检查 SERVER_NAME 是否等于 nginx IP。问题是我不知道该怎么做。我应该创建一个包含“前缀”的全局变量,还是有另一种方法可以将/ttt 添加到每个 url 生成?

【问题讨论】:

    标签: nginx laravel-4 routes


    【解决方案1】:

    对于有同样问题的人,这是我的肮脏技巧:

    我在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');
        .....
    });
    

    如果 REQ_NGINX 等于 true,这将在所有路由前面添加 ttt 字符串

    然后我编辑了文件 vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php
    在构造函数的末尾,我添加了这一行:

    $this->forceRootUrl(TTT_URL);
    

    最后一步是编辑.htaccess 并在index.phpRewriteCond 之前添加以下行

    # Handle css, js, img...
    RewriteCond %{REQUEST_URI} \.(css|js|png|jpg|gif|eot|svg|ttf|woff)$
    RewriteRule ^ttt/(.*)$ /$1 [L]
    

    这将为 css、js... 文件去除 ttt 部分

    我希望这个自我回答能帮助将来遇到同样问题的人。长期以来一直在研究这个问题。不过,如果您找到了更好/更清洁的解决方案,请不要犹豫,回答这个问题。

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2020-07-29
      • 1970-01-01
      • 2021-10-17
      • 2021-03-28
      相关资源
      最近更新 更多