在Google App Engine中关闭区分大小写的URL

Joh*_*rNZ 2 google-app-engine

我们最近将公司网站迁移到Google应用引擎.我们在网站上遇到了部分链接的区分大小写问题.当服务器上的相应文件夹为小写时,某些链接为大写.这不是我们旧的Windows服务器上的问题.Google应用引擎似乎与网址区分大小写.这导致链接断开.

有谁知道是否有办法让我们的网址在Google应用引擎上不受影响?

Nic*_*son 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)
Run Code Online (Sandbox Code Playgroud)

请注意,这不是App Engine中的"错误" - URL区分大小写,并且事情确实有效的唯一原因是Windows与大多数其他平台不同,忽略了大小写.

对于静态文件,添加一个只接受小写文件名的静态处理程序,以及一个接受任一情况的文件名的动态处理程序:

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

现在写'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()
Run Code Online (Sandbox Code Playgroud)

编辑:添加了静态文件的解决方案.