【问题标题】:Laravel middleware before WordPress routeWordPress 路由之前的 Laravel 中间件
【发布时间】:2019-07-09 14:44:36
【问题描述】:

我在 Laravel 项目中安装了 WordPress。 它在 public 文件夹内的 /forum 文件夹下,所以我每次去:

http://localhost:8000/forum/

它会打开 WordPress 页面。

不过,我无法在此路由之前运行中间件实例。

我想:

Route::GET('/forum', function() { })->middleware('wp_login');

这是我的示例中间件:

<?php
namespace App\Http\Middleware;

use Closure;
use Log;

class WpForumLogin
{
    public function handle($request, Closure $next)
    {

        Log::debug("test forum lalalala");

        return $next($request);
    }
}

中间件在内核中设置如下:

    ...
    protected $routeMiddleware = [

        ...

        'wp_login' => \App\Http\Middleware\WpForumLogin::class,

    ];

在运行 WordPresse 的 /forum 路由之前如何运行这个中间件?

谢谢。

【问题讨论】:

  • 现在发生了什么?您是否被直接重定向到论坛?
  • 可能你的 laravel 用完了,直接到 wordpress 网站。在这种情况下,您可以做的事情很少,它们都不是最佳的
  • @TomasCrofty 我没有通过 Laravel 就进入论坛页面。
  • @GiacomoMasseroniChiaro 我对想法持开放态度:D 如果有办法,请告诉我,我会尽力解决这些问题。谢谢。
  • 可能重命名 wordpress 文件夹以验证您的网络请求是否通过 laravel。

标签: php laravel middleware


【解决方案1】:

您不能拥有与您的路线同名的公共目录。 Web 服务器将始终首先查找实际的文件/文件夹。

【讨论】:

  • 我假设是这样,但没有办法覆盖这种行为吗?
  • 其实你可以使用.htaccess如果你使用的是apache(我不确定nginx)但这不是一个好的选择,我想你可能可以为WordPress和Laravel共享数据库并从 WordPress 网站做这件事。
  • 我宁愿不使用.htaccess,但如果没有其他办法,我会调查一下。谢谢你的提示。至于数据库的共享,我们已经研究过了,我们决定保留两个独立的数据库,原因过于复杂,无法在此解释。
【解决方案2】:

这是你可以做什么的想法:

  • 重命名“论坛”文件夹(例如“wordpress”)
  • 现在当你转到“/forum”路由时,laravel 会响应,你可以执行你的中间件
  • 在您的中间件中,在您完成控制后,您可以将用户重定向到新文件夹(例如“wordpress”)。

此解决方案的缺点:

  • 用户可以看到url的变化
  • 如果用户直接访问“/wordpress”网址,他会绕过您的中间件。在这种情况下,您可以检查引荐来源网址并按照您的意愿行事。

这不是理想的解决方案,但它是一种解决方法。

【讨论】:

  • 这正是我现在实施的。正如您所说,用户可以看到网址,如果他知道原始网址,他可以绕过中间件。这并不理想,但这是我目前最好的解决方案。无论如何感谢您的意见。
猜你喜欢
  • 2019-11-28
  • 2015-09-28
  • 1970-01-01
  • 2021-07-03
  • 2017-10-11
  • 2016-05-03
  • 2017-05-19
  • 2016-12-16
  • 2016-12-09
相关资源
最近更新 更多