3

私が取り組んでいるバージョンの Django Web サイトを Microsoft の Azure サービスにデプロイする際に、次のようなクエリ文字列を受け取るページを追加しました。

http://<my_site_name>.azurewebsites.net/security/user/?username=<some_username>&password=<some_password>

しかし、この URL に対して 404 の応答がありました。そこで、Django のデバッグ フラグをオンにすると、返されたページに次のように表示されました。

Page not found (404)
Request Method:     GET
Request URL:    http://<my_site_name>.azurewebsites.net/security/user/?username=<some_username>&password=<some_password>?username=<some_username>&password=<some_password>


Using the `URLconf` defined in `<my_project_name>.urls`, Django tried these URL patterns, in this order:

^$
^security/ ^user/$
^account/
^admin/
^api/

The current URL, `security/user/?username=<some_username>&password=<some_password>`, didn't match any of these.

そのため、既に同じクエリ文字列を持つ URL の末尾にクエリ文字列を追加しているようです。ローカル マシンと、Azure にプッシュする前のステージングに使用している内部ネットワーク上の iis サーバーでサイトを実行しています。これらのサイト展開はどちらもこれを行わないため、これは Azure に固有のもののようです。

クエリ文字列で URL が変更されないようにするために、Azure Web サイト管理インターフェイスで設定する必要があるものはありますか? Azure でのクエリ文字列の使用に関して、私が間違っていることはありますか?

4

1 に答える 1

1

wfastcgi.py のプロバイダーと話すと、この問題を引き起こしているのは wfastcgi.py に問題がある可能性があるとのことでした。彼らが調査している間、彼らは私に問題を解決する回避策を提供してくれました。

http://pytools.codeplex.com/releasesから wfastcgi.py の最新コピーをダウンロードします。

そのファイルで、コードの次の部分を見つけます。

if 'HTTP_X_ORIGINAL_URL' in record.params:
    # We've been re-written for shared FastCGI hosting, send the original URL as the PATH_INFO.
    record.params['PATH_INFO'] = record.params['HTTP_X_ORIGINAL_URL']

そのすぐ下に追加します (まだ if ブロックの一部です):

# PATH_INFO is not supposed to include the query parameters, so remove them
record.params['PATH_INFO'] = record.params['PATH_INFO'].split('?')[0]

次に、この変更されたファイルを Azure サイトにアップロード/デプロイします (ftp を使用してどこかに配置するか、サイトのデプロイに追加します。さらに変更する必要がある場合は、バージョン管理とバックアップが必要になるようにデプロイしています。

サイトの Azure 管理ページで、サイトの構成ページに移動し、変更された wfastcgi.py ファイルを指すようにハンドラー マッピングを変更して、構成を保存します。

つまり、私のハンドラーはデフォルトの D:\python27\scripts\wfastcgi.py でした。変更したファイルをデプロイしたので、ハンドラー パスは D:\home\site\wwwroot\wfastcgi.py になりました。

サイトも再起動しましたが、必要ないかもしれません。

この変更されたスクリプトは、PATH_INFO からクエリ文字列を取り除き、クエリ文字列を含む URL が機能するようになりました。Python27インストールのデフォルトのwfastcgi.pyファイルが修正/置き換えられたことをwfastcgi.py開発者から聞くまで、これを使用します。

于 2013-03-12T15:12:14.623 に答える