3

在将我正在开发的 Django 网站版本部署到 Microsoft 的 Azure 服务时,我添加了一个页面,该页面采用如下查询字符串

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

但是,我收到了对此 URL 的 404 响应。所以我打开了 Django 的 Debug 标志,我返回的页面说:

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 的末尾。我的站点在我的本地计算机和内部网络上的 iis 服务器上运行,我在推送到 Azure 之前将其用于暂存。这些站点部署都没有这样做,因此这似乎是 Azure 特有的。

是否需要在 Azure 网站管理界面中设置一些内容,以防止它使用查询字符串修改 URL?关于在 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 应该可以工作。在我从 wfastcgi.py 开发人员那里得知 Python27 安装中的默认 wfastcgi.py 文件已被修复/替换之前,我将一直使用它。

于 2013-03-12T15:12:14.623 回答