Django / WSGI和PHP如何在Apache上共享?

我有一个服务器运行一个build立的PHP网站,以及一些Django的应用程序。

目前,为PHP设置的VirtualHost侦听端口80,并且对某些目录的请求通过WSGI代理到为Django设置的VirtualHost。

我想改变它,所以Django处理任何不存在的PHP脚本或静态文件。

例如,

/ – >由PHPparsing为index.php
/page.php – >正常parsing为PHP
/images/border.jpg – >充当静态文件
/ johnfreep – >由Django处理(由urls.py解释)
/ pages / john – >由Django处理
/(其他) – >由Django处理

我有几个想法。 看起来这些选项是'php first'或'wsgi first'。

  • 在端口80上设置Django,并设置Apache跳过所有已知的PHP,CSS或图像文件。 也许使用SetHandler? 任何其他事情去Django由urls.pyparsing。

  • 设置一个脚本,将所有内容都引用到Django上,作为PHP上的404处理程序。 所以,如果找不到名称的文件,它会将请求path发送到运行Django的VirtualHost进行parsing。

使用方法介绍如下:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive

因此有静态文件和PHP文件等正常的DocumentRoot设置,然后添加:

AddHandler wsgi-script .wsgi 

到DocumentRoot的目录块,或全局用于服务器。

你将尽pipe需要有:

 Options ExecCGI 

如果您尚未启用DocumentRoot。

然后还加上:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /site.wsgi/$1 [QSA,PT,L] 

其中site.wsgi位于DocumentRoot中,并且是映射到您的Django应用程序的WSGI脚本文件。

在Django WSGI脚本文件中将其更改为使用:

 import django.core.handlers.wsgi _application = django.core.handlers.wsgi.WSGIHandler() import posixpath def application(environ, start_response): # Wrapper to set SCRIPT_NAME to actual mount point. environ['SCRIPT_NAME'] = posixpath.dirname(environ['SCRIPT_NAME']) if environ['SCRIPT_NAME'] == '/': environ['SCRIPT_NAME'] = '' return _application(environ, start_response) 

应该是这样的。

任何映射到DocumentRoot下实际基于文件的资源的请求,无论是静态文件还是php文件,包括DirectoryIndex的设置,例如index.php,都将被正常处理。 否则将导致404的任何其他URL将被路由到Django应用程序中。

/ johnfreep和/ pages / john在urls.py文件中必须具有对应的URL,就像挂载在根目录下一样。

如果Django不知道如何处理URL,那么Django将返回404。

阅读wiki文档以获取更多信息。