Estou tentando configurar o Apache para hospedar um webservice do Django e um site PHP.
Todas as URLs com o padrão www.mysite.com/api
devem ser direcionadas para o serviço Django.
Todos os outros URLs (por exemplo, www.mysite.com
) devem ser direcionados para o site do PHP.
Minha configuração de host virtual é assim:
...
WSGIScriptAlias /api /var/www/mysite.com/apache/django.wsgi
<Directory /var/www/mysite.com/apache>
Order allow,deny
Allow from all
</Directory>
Alias / /var/www/mysite.com/apache/php/
<Directory /var/www/mysite.com/apache/php>
Options Indexes FollowSymLinks
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
...
Isso direciona cada solicitação para o manipulador correto. No entanto, meu Django urls.py se parece com isso:
...
api_patterns = patterns('',
url(r'^api/1.0/$', views.api_root),
url(r'^api/1.0/oauth/',
include('oauth2_provider.urls',
namespace='oauth2_provider')),
...
Isso não corresponde a nenhum URL porque espera que eles comecem com api
. Este prefixo é, naturalmente, retirado antes de chegar aqui (quando os pedidos chegam aqui eles estão no formato 1.0/oauth
etc.).
Existe alguma maneira de passar um URL totalmente intacto para o Django?
Solução
Graham Dumpleton, autor de mod_wsgi, sugeriu algumas abordagens para corrigir isso, e ambas funcionaram (veja a resposta aceita abaixo).
Eu fui para a solução que ele sugere no UPDATE 1. Anexando /api
ao caminho do arquivo resolve o problema:
WSGIScriptAlias /api /var/www/mysite.com/apache/django.wsgi/api
i.e. /api
não é mais retirado da URL no momento em que alcança o Django.
Então, aqui estão as partes relevantes da minha configuração de trabalho:
...
DocumentRoot /var/www/mysite.com/apache/php
WSGIScriptAlias /api /var/www/mysite.com/apache/service/django.wsgi/api
<Directory /var/www/mysite.com/apache/service>
WSGIProcessGroup www.mysite.com
WSGIPassAuthorization On
Options -Indexes
Order allow,deny
Allow from all
</Directory>
# PHP web site
<Directory /var/www/mysite.com/apache/php>
Options -Indexes FollowSymLinks
AllowOverride All
Order Deny,Allow
Allow from all
DirectoryIndex index.php
</Directory>
...