web-dev-qa-db-ja.com

Django / WSGIとPHP共有/ Apache上でどのようにできますか?

確立されたPHPサイトと、いくつかのDjangoアプリを実行しているサーバーがあります。

現在、PHPに設定されたVirtualHostはポート80でリッスンし、特定のディレクトリへの要求は、WSGIを使用してDjangoに設定されたVirtualHostにプロキシされます。

Djangoは、存在しないものをPHPスクリプトまたは静的ファイルとして処理するように変更したいと思います。

例えば、

/-> PHP asindex.phpとして解析
/page.php->通常PHP)として解析
/images/border.jpg->静的ファイルとして機能
/johnfreep-> Django(urls.pyで解釈)
/pages/john-> Djangoによって処理されます
/(その他)-> Djangoによって処理されます

いくつかのアイデアがあります。オプションは「phpfirst」または「wsgifirst」のようです。

  • ポート80でDjangoを設定し、既知のPHP、CSS、または画像ファイルをすべてスキップするようにApacheを設定します。SetHandlerを使用している可能性がありますか?他にDjango to urls.pyによって解析されます。

  • すべてを参照するスクリプトをセットアップしてDjangoをPHPの404ハンドラーとして使用します。したがって、名前のファイルが見つからない場合は、Django。

2
Mark Snidovich

説明されている方法を使用します。

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

したがって、静的ファイルやphpファイルなどに対して通常どおりDocumentRootを設定します。次に次を追加します。

AddHandler wsgi-script .wsgi

documentRootの場合はDirectoryブロックに、サーバーの場合はグローバルに。

ただし、次のものが必要になります。

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ドキュメントをお読みください。

4