2009-09-15 5 views
2

Nous avons récemment déplacé le site Web de notre société vers le moteur de l'application Google. Nous avons rencontré des problèmes de sensibilité à la casse avec certains liens de notre site Web. Certains liens sont en majuscules lorsque les dossiers correspondants sur le serveur sont en minuscules. Ce n'était pas un problème sur notre ancien serveur Windows. Le moteur de l'application Google semble sensible à la casse avec les URL. Cela provoque des liens brisés.Désactiver les URL sensibles à la casse dans Google App Engine

Est-ce que quelqu'un sait s'il existe un moyen de rendre nos URL insensibles à la casse dans le moteur de l'application Google?

+0

Où sont les liens brisés? Dans votre code ou dans les signets du client? –

+0

Dans le code HTML. Les problèmes sont avec les fichiers statiques. – JohnCooperNZ

+0

Je viens d'avoir une révélation - voir ma réponse mise à jour. :) –

Répondre

7

S'agit-il de fichiers statiques ou de gestionnaires dynamiques? pour les gestionnaires dynamiques, vous pouvez facilement écrire un morceau de middleware WSGI que les cas inférieurs-tous les URIs:

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) 

Notez que ce n'est pas un « bug » dans App Engine - Les URL sont sensibles à la casse, et la seule raison les choses ont fonctionné parce que Windows, contrairement à la plupart des autres plates-formes, ignore les cas.

Pour les fichiers statiques, ajouter un gestionnaire statique qui accepte uniquement les noms de fichiers minuscules, et un gestionnaire dynamique qui accepte les noms de fichiers de deux cas:

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

Maintenant, écrivez « tolowercase.py », un gestionnaire qui redirige tout nom de fichier de casse mixte à la version à boîtier inférieur:

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

Modifier: Ajout d'une solution pour les fichiers statiques.

+0

Je reçois l'erreur en tant que 'gestionnaire de l'attribut inattendu' –

+0

Je suis un débutant à AppEngine. Pouvez-vous m'expliquer comment y parvenir. –

+0

Vous devez coller votre code quelque part pour que je puisse vous aider. Peut-être commencer une nouvelle question? –

0

Je ne connais pas de manière intégrée. Tout ce que je peux penser est que vous auriez besoin de créer un gestionnaire pour /(.*) et ensuite écrire du code à transmettre sur les demandes aux gestionnaires appropriés à partir de là.

Questions connexes