mod_wsgi 无法传递到 wordpress 吗?

mod_wsgi 无法传递到 wordpress 吗?

我们使用 apache、mod_php 和 mod_wsgi 来为中央 wordpress 站点提供服务,而一些路径则由 Django 提供支持,例如这些页面可能由 Wordpress 提供支持:

oursite.com/
oursite.com/video/

但这些 URL 可能是由 Django 支持的:

oursite.com/our-cool-django-app/
oursite.com/schedule/

目前,我们使用一长串 WSGIScriptAlias 将特定路径映射到 Django。这很烦人,而且很费力。

那么,有没有办法我们可以配置如下内容:

  • 其中一个会首先尝试处理 URL(我不太担心)
  • 如果该处理程序返回 404,请尝试另一个

我对 Apache 解决方案特别感兴趣,但也会考虑其他替代方案。

答案1

这是对您对替代方案的娱乐的回应。

我在同一个域上托管了 Django 和 WordPress,使用 Nginxphp5-fpm来托管 WordPress,并依赖Nginx 的X-Accel-Redirect返回未定义的 URL 到 WordPress上游

Nginx 配置从 WordPress 应处理的已知模式开始:索引页、一些顶级内容页或顶级部分,以及/或博客文章的模式。这意味着大多数 WordPress URL 都可以用十几个或更少的 URL 模式捕获。

其余一切都路由至 Django 上游。

那么 WordPress 网站的新页面或更改怎么办?Django 应用不会更新每个添加的 WordPress 页面或部分的 URL 模式,而是使用自定义 404 处理程序将请求重定向到 WordPress 上游。

def page_not_found(request):
    """
    A 404 view that redirects to the WordPress installation.
    """
    try:
        new_url = Redirect.objects.get(old_path=request.get_full_path())
    except Redirect.DoesNotExist:
        pass
    else:
        return redirect(new_url.new_path)

    if not settings.WORDPRESS_REDIRECT:
        return render(request, "404.html", {})

    response = HttpResponse()
    response['X-Accel-Redirect'] = '/wordpress/'
    return response

通过重定向请求,重定向中间件将不会“看到”任何 404 错误,因此如果您想使用重定向功能,则应在此处添加。该/wordpress/位置定义为 Nginx 配置中的内部位置。

  location /wordpress/ {
    internal;
    try_files $uri $uri/ /index.php;
  }

我写了一些关于使用X-Accel-Redirects 用于此目的,尽管我认识到这并没有回答具体问题。

希望它能给你一些想法,你可以使用X-Sendfilemod_php与和做类似的事情mod_wsgi

答案2

读:

使用 AddHandler/mod_rewrite 方法。

如果由于没有相应的 .php 文件而导致 PHP 应用程序无法处理某个 URL,则该 URL 将转交给 WSGI 应用程序。

相关内容