mod_wsgi fail-through para wordpress?

1

Usamos o apache, mod_php e mod_wsgi para servir um site wordpress central, com alguns caminhos movidos pelo Django, então, por exemplo, essas páginas podem ser alimentadas pelo Wordpress:

oursite.com/
oursite.com/video/

mas esses URLs podem ser movidos pelo Django:

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

Agora, usamos uma longa lista de WSGIScriptAlias para mapear caminhos específicos para o Django. Isso é irritante e trabalhoso.

Então, existe uma maneira de configurar coisas como:

  • Uma ou outra primeira tentativa de lidar com a URL (não estou muito preocupado) primeiro
  • Se esse manipulador retornar um 404, tente o outro

Estou particularmente interessado em uma solução Apache, mas vou considerar alternativas.

    
por Ross M Karchner 25.03.2013 / 19:44

2 respostas

1

Isso é uma resposta ao seu entretenimento de alternativas.

Eu hospedei o Django e o WordPress no mesmo domínio por trás do Nginx usando php5-fpm para WordPress e confiando em X-Accel-Redirect para retornar URLs indefinidos para o upstream do WordPress.

A configuração do Nginx começa com padrões conhecidos que o WordPress deve manipular: uma página de índice, algumas páginas de conteúdo de alto nível ou seções de nível superior, e / ou o padrão para postagens de blog. Isso significa que a maioria dos URLs do WordPress pode ser capturada com uma dúzia ou menos de padrões de URL.

Todo o restante é roteado para o desenvolvimento do Django.

E as novas páginas ou alterações no site do WordPress? Em vez de atualizar os padrões de URL para cada página ou seção do WordPress adicionada, o aplicativo Django usa um manipulador 404 personalizado para redirecionar a solicitação para o envio de dados do 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

Ao redirecionar as solicitações, o middleware de redirecionamento não "verá" nenhum erro 404, portanto, se você quiser usar o recurso de redirecionamento, ele deverá ser adicionado aqui. O /wordpress/ location é definido como um local interno na configuração do Nginx.

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

Eu escrevi um pouco mais sobre o uso de X-Accel-Redirects para essa finalidade , embora reconheça que isso não responde à pergunta específica.

Espero que ele forneça algumas ideias de que você poderia empregar X-Sendfile para fazer algo semelhante com mod_php e mod_wsgi .

    
por 25.03.2013 / 20:31
1

Leia:

Use o método AddHandler / mod_rewrite.

Se um URL não puder ser manipulado pelo seu aplicativo PHP, porque não há arquivo .php correspondente, ele passará para o seu aplicativo WSGI.

    
por 25.03.2013 / 21:19