Microsoft Azure将额外的查询字符串附加到具有查询字符串的URL

时间:2013-03-08 17:20:37

标签: django iis azure cgi fastcgi

在部署我正在研究微软Azure服务的Django网站版本时,我添加了一个带有查询字符串的页面,如

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

但是,我收到了对此网址的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中使用查询字符串,我有什么问题吗?

1 个答案:

答案 0 :(得分:0)

在与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中删除查询字符串,并且带有查询字符串的网址应该可以使用。我将使用这个,直到我从wfastcgi.py开发者那里听说Python27安装中的默认wfastcgi.py文件已被修复/替换。