2010-07-27 63 views
0

這是我的app.yaml:網址與谷歌應用程序斜線引擎

- url: /about|/about/.* 
    script: about.py 

這是我的`about.py':

application = webapp.WSGIApplication([(r'^/about$', AboutPage), 
             (r'^/about/$', Redirect), 
             (r'.*', ErrorPage)], 
             debug = True) 

我想所有請求重定向到/about/​​。我希望將所有其他請求發送到錯誤頁面。

它在localhost上的開發服務器上工作,但在GAE上部署應用程序後,我無法訪問/about/ - 它只顯示一個空白頁面。

我調整了app.yaml中URL模式的順序。 它現在適用於GAE。

+1

也許問題是重定向,而不是URL模式。 – cope360 2010-07-27 13:35:02

+0

什麼重定向是 self.redirect('/ about') 它在我自己的機器上運行良好 – 2010-07-28 00:44:34

回答

6

如果您不希望在應用程序中的任何位置發生GET請求的尾部斜線,則可以在app.yaml的頂部實施全局重定向。請注意,POST請求不會重定向,但這是可以的(對我來說無論如何),因爲用戶通常不會手寫POST URL。

的app.yaml

application: whatever 
version: 1 
api_version: 1 
runtime: python 

handlers: 
- url: .+/ 
    script: slashmurderer.py 

slashmurderer.py

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

class SlashMurdererApp(webapp.RequestHandler): 
    def get(self, url): 
     self.redirect(url) 

application = webapp.WSGIApplication(
    [('(.*)/$', SlashMurdererApp)] 
) 

def main(): 
    run_wsgi_app(application) 
0

我的經驗 - 看看你的URL是否在它的任何地方都有一個「//」(雙斜槓)。如果它具有它,那麼它在本地主機上工作,但它不適用於雲。

+0

但是沒有雙斜線。 GAE日誌顯示空白頁面是由404錯誤引起的。 – 2010-07-28 00:37:01

1

我看到,這個問題已經回答了,但我遇到了同樣的問題,並希望看到如果有「懶惰」的解決方案。

如果你正在使用Python 2.7運行時,則webapp2的庫是可用的,而且我相信下面的工作:

import webapp2 
from webapp2_extras.routes import Redirect Route 

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     self.response.out.write("This is my first StackOverflow post") 

app = webapp2.WSGIApplication([ 
    RedirectRoute('/', MainHandler, name='main', strict_slash=True), 
    ('/someurl', OtherHandler), 
]) 

strict_slash = True表示如果客戶不提供斜槓它將被重定向到帶有斜槓的url(以匹配第一個參數)。

您可以將webapp2_extras中的特殊Route類與普通(正則表達式,處理程序)元組結合使用,如上所示。 RedirectRoute的構造函數需要「name」參數。更多細節在這裏:webapp2_extras documentation for RedirectRoute