2009-09-15 3 views
2

Недавно мы перевели наш веб-сайт компании в Google. Мы столкнулись с проблемами чувствительности к регистру с некоторыми ссылками на нашем веб-сайте. Некоторые ссылки имеют верхний регистр, если соответствующие папки на сервере имеют строчные буквы. Это не проблема на нашем старом сервере Windows. Механизм Google-приложений, похоже, чувствителен к регистру с URL-адресами. Это вызывает неработающие ссылки.Отключить чувствительные к регистру URL-адреса в Google App Engine

Кто-нибудь знает, есть ли способ заставить наш URL-адрес работать без учета движка Google?

+0

Где находятся неработающие ссылки? В вашем коде или в закладках клиента? –

+0

В HTML-коде. Проблемы со статическими файлами. – JohnCooperNZ

+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() 

Редактировать: Добавлено решение для статических файлов.

+0

Я получаю ошибку как обработчик «Неожиданный атрибут» –

+0

Я новичок в AppEngine. Можете ли вы объяснить мне, как достичь этого. –

+0

Вам нужно вставить свой код где-нибудь для меня, чтобы помочь. Возможно, начните новый вопрос? –

0

Не знаю, как построить.

Все, что я могу думать, это то, что вам нужно создать обработчик для /(.*), а затем написать код для пересылки запросов на нужные обработчики.

Смежные вопросы