【问题标题】:Wordpress & Laravel nginxWordPress 和 Laravel nginx
【发布时间】:2017-05-29 22:57:35
【问题描述】:

我有一个基于 WP 的正在运行的博客。目前,我正在使用 Laravel 开发一个新的 Web 应用程序,它应该在同一个(子)域上运行。新的网络应用程序应该是网站的新起始页/主页/文档根 www.xyz.xyz/ 但我不想更改当前的 WP URL 结构 - 我不想在子目录中运行 WP -所以一切都应该保持原样,除了起始页应该由 laravel 而不是 wordpress 提供之外,它是现有的 URL。

当然,一个 wordpress 帖子和一个 laravel 网页可能会使用相同的 slug,尽管它不应该,在这种情况下应该提供 Laravel 页面。

我使用 nginx 作为网络服务器。有没有人做过这样的事情?它可以在nginx级别上完成吗?有人对如何解决这个问题有建议吗?

如果 Laravel 可以提供页面,我将在异常处理程序中进行识别,如果 WP 也没有页面可以提供,它将负责显示 404 - Curling WP 博客工作,只要他们不在同一个子域/网络服务器上运行。

主要的问题是,如何配置 index.php 和 nginx 以同时服务于 Laravel 和 WP 在同一个(子)域上并在同一个目录中运行。

/** * 将异常渲染到 HTTP 响应中。 * * @param \Illuminate\Http\Request $request * @param \异常 $异常 * @return \Illuminate\Http\Response */ 公共函数渲染($请求,异常$异常) {

    if ($this->isHttpException($exception)) {

        $statusCode = $exception->getStatusCode();

        switch ($statusCode) {
            case '404':


                if(Cache::store('file')->has('magazin-startpage')) {
                    echo Cache::store('file')->get('magazin-startpage');
                    return;
                }

                $queryParameter = str_replace($request->url(), "",
                    $request->fullUrl());
                $path = $request->getPathInfo();

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt ($ch, CURLOPT_PORT , 443);
                curl_setopt($ch, CURLOPT_URL,"https://www.blog.xyz"
                    .$path.$queryParameter);
                curl_setopt($ch, CURLOPT_POST, 1);
                $blog = curl_exec ($ch);
                curl_close ($ch);
                Cache::store('file')->put('www.blog.xyz', $blog, 60);
                echo $blog;

                return;

            break;
        }
    }

    return parent::render($request, $exception);
}

谢谢。

【问题讨论】:

    标签: php wordpress laravel nginx laravel-5


    【解决方案1】:

    我不确定是否有脚本可以在返回页面之前检查查询结果。因此,我可以想到两个选项。

    1. 如果您知道 wordpress slug 的根源,您可以使用 web.config 将它们每个的所有流量(即 sub.example.com/category)引导到 wordpress,并将其他“文件夹”的流量引导到 Laravel。
    2. 如果你不知道 slugs 的根或者想混合它们,你需要创建一个新的 index.php 文件来处理调用 wordpress 或 Laravel。这个文件需要首先连接到 Laravel 并使用路由器来确定页面是否存在。如果是,它将请求完全发送到 Laravel,如果不是,它将请求发送到 wordpress。

    有关方法 2 的帮助,请参阅 How can I check if a URL exists via Laravel?

    您需要将 Laravel 的 public/index.php 与相应的 wordpress 文件合并。使用web.config 和目录切换,您应该能够在完全不同的目录中进行两次安装。然后你可以默认将所有内容发送到 Laravel 并编辑 public/index.php 以将不存在的请求发送到 wordpress 引擎中。

    【讨论】:

    • 感谢您的回答,我编辑了我的初始帖子,404 识别已经完成,类似于您的第二种方法,但在错误处理程序中。您有任何示例这样的 index.php + nginx 配置应该是什么样子吗?谢谢。
    • 我没有示例,但我认为您应该能够使用 wordpress index.php 文件并简单地导入它的内容而不是 curl 请求,因为您将拥有所有文件正确在您的网络服务器上。由于 curl 更简单,您可以让 WP 实际上在不同的子域上运行,然后使用 curl 让它在外界看来就像在这个域上。
    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 2016-04-05
    • 2019-02-07
    • 1970-01-01
    • 2021-05-10
    • 2016-07-21
    • 2015-05-22
    • 2021-08-14
    相关资源
    最近更新 更多