我可以configurationapache / mod_wsgi,以便别名URLpath在到达我的Django应用程序之前不被剥离?

我想configurationApache来承载一个Django的web服务和一个PHP网站。

所有使用www.mysite.com/api模式的url都应该被定向到Django服务。 所有其他url(例如www.mysite.com )应该被引导到PHP网站。

我的虚拟主机configuration如下所示:

 ... 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> ... 

这将每个请求指向正确的处理程序。 但是,我的Django的urls.py看起来像这样:

 ... api_patterns = patterns('', url(r'^api/1.0/$', views.api_root), url(r'^api/1.0/oauth/', include('oauth2_provider.urls', namespace='oauth2_provider')), ... 

这不匹配任何url,因为它期望他们以api开头。 这个前缀当然是在它到达之前被剥离的(当请求到达这里时,它们的格式是1.0/oauth等)。

有没有办法将完整的URL传递给Django?

mod_wsgi的作者Graham Dumpleton提出了一些解决这个问题的方法,两者都起作用(见下面的接受答案)。

我去了他在UPDATE 1build议的解决scheme。追加/api文件path解决了这个问题:

 WSGIScriptAlias /api /var/www/mysite.com/apache/django.wsgi/api 

即,当到达Django时, /api不再被剥离掉。

所以这里是我的工作configuration的相关部分:

 ... 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> ... 

你所看到的正是它的工作原理。 WSGI应用程序不应该关心也不能embedded关于它在哪里安装的知识。 换句话说,您不应该在urls.py中将“api”作为前缀。 为什么你认为你需要在urls.py中使用“api”前缀?


更新1

您可以使用:

 WSGIScriptAlias /api /var/www/mysite.com/apache/django.wsgi/api 

我现在不记得确切的公式,是否正确,但尝试一下。