我们最近将公司网站移至Google应用引擎。我们在网站上遇到了部分链接的区分大小写问题。当服务器上的相应文件夹为小写时,某些链接为大写。这不是我们旧的Windows服务器上的问题。 Google应用引擎似乎与网址区分大小写。这导致链接断开。
是否有人知道是否有办法让我们的网址在Google应用引擎上不受影响?
答案 0 :(得分: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中的“错误” - URL区分大小写,并且事情确实有效的唯一原因是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()
编辑:添加了静态文件的解决方案。
答案 1 :(得分:0)
我不知道内置的方式。
我只能想到你需要为/(.*)创建一个处理程序,然后编写一些代码来将请求转发给正确的处理程序。
答案 2 :(得分:0)
使用这里的一些示例,这是我处理大写网址的方式。
import webapp2
class ToLowerHandler(webapp2.RequestHandler):
def get(self):
self.redirect(self.request.url.lower())
app = webapp2.WSGIApplication([
('/.*', ToLowerHandler)
], debug=True)
def main():
application.run()
if __name__ == "__main__":
main()