2015-05-10 34 views
1

我在Azure網站上部署了一個Django網站,遵循Django Azure教程。一切正常,除了一個URL:我唯一的URL接受空格。Azure Python網站URL中沒有URL解碼空間

當我請求https://mysite.azurewebsites.net/root/path/this%20is%20a%20parameter(並且我已經檢查過查詢是用%20發送的 - 不是空格或雙重編碼),Django裏面的PATH_INFO實際上是/ root/path/this%20is%20a%20parameter 。雖然在我的理解中應該用空格而不是%20解碼 - IIS(實際上,http.sys)負責解碼。

它與調試服務器完美配合。但是在Azure IIS中,由於該值已經過時,我的應用程序崩潰了。

當使用查詢參數(?key = value)時,也沒有問題(這是合乎邏輯的,因爲IIS不會觸及該部分)。

在訪問日誌中,奇怪的是我找到加號(+)而不是%20或空格:GET/root/path/this +是+ a +參數(非常奇怪,因爲+在該部分中不合法URL,也許它只是一個日誌記錄工件?)

最後,我沒有使用任何形式的重寫 - 我已經直接將FastCGI處理程序映射到此URL以避免任何混淆。

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="django.core.wsgi.get_wsgi_application()" /> 
     <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\activate_this.py" /> 
     <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" /> 
     <add key="PYTHONPATH" value="D:\home\site\wwwroot" /> 
     <add key="DJANGO_SETTINGS_MODULE" value="MYAPP.settings" /> 
    </appSettings> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <customErrors mode="Off"/> 
    </system.web> 
    <system.webServer> 
     <handlers> 
      <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> 
     </handlers> 
    </system.webServer> 
</configuration> 

是否有人會遇到這種情況,並能夠檢索解碼值?謝謝!

回答

1

最後,這是Azure提供的用於WSGI(WSGI/FCGI橋)的IIS處理程序中的一個錯誤。我在their GitHub

中打開了一個錯誤