2009-09-15 50 views
2

我們最近將公司網站移至Google應用引擎。我們遇到了網站中某些鏈接的大小寫敏感問題。當服務器上的相應文件夾爲小寫時,某些鏈接爲大寫。這在我們的舊windows服務器上不是問題。 Google應用引擎似乎對網址區分大小寫。這導致鏈接斷開。關閉Google App Engine中區分大小寫的網址

有誰知道是否有辦法讓我們的URL在Google應用引擎上不區分大小寫?

+0

哪裏斷鏈?在你的代碼或客戶端的書籤中? – 2009-09-15 22:04:00

+0

在HTML代碼中。問題出在靜態文件上。 – JohnCooperNZ 2009-09-16 13:04:36

+0

我只是有一個頓悟 - 看到我更新的迴應。 :) – 2009-09-16 18:05:42

回答

7

這是用於靜態文件還是動態處理程序?動態處理程序,你可以隨便寫一段WSGI中間件的那個較低情況下,所有的URI:

def lower_case_middleware(environ, start_response): 
    environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'].lower() 
    environ['PATH_INFO'] = environ['PATH_INFO'].lower() 
    return application(environ, start_response) 

請注意,這不是在App Engine的一個「錯誤」 - 網址區分大小寫,唯一的理由事情確實奏效了,因爲與大多數其他平臺不同,Windows忽略了這種情況。

對於靜態文件,添加一個靜態處理程序,只接受小寫的文件名,並接受任何一種情況下的文件名動態處理函數:

handlers: 
- url: /static/([^A-Z]+) 
    static_files: static/\1 
    upload: static/.* 
- url: /static/.* 
    handler: tolowercase.py 

現在寫「tolowercase.py」,即重定向任何處理程序混合大小寫文件名到較低版本:

from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class LowerCaseRedirecter(webapp.RequestHandler): 
    def get(self, path): 
    self.redirect('/static/%s' % (path.lower(),)) 

application = webapp.WSGIApplication([('/static/(.*)', LowerCaseRedirecter)]) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

編輯:添加了靜態文件的解決方案。

+0

我越來越錯誤爲'意外屬性'處理程序' – 2010-08-17 20:14:14

+0

我是AppEngine的新手。你能解釋我如何實現這一點。 – 2010-08-17 20:24:47

+0

你需要粘貼你的代碼給我幫助。也許開始一個新的問題? – 2010-08-18 07:23:07

0

我不知道內置的方式。

我能想到的是,您需要爲/(.*)創建一個處理程序,然後編寫一些代碼將請求轉發給正確的處理程序。