使用Flask微框架将旧URL重定向到新URL

时间:2010-09-24 17:17:52

标签: python url-routing flask werkzeug

我正在创建一个新网站来替换当前的网站,使用Flask微框架(基于Werkzeug),它使用Python(在我的情况下为2.6)。

核心功能和许多页面是相同的。但是,通过使用Flask,许多以前的URL与旧的URL不同。

我需要一种方法以某种方式存储每个旧URL和新URL,这样如果用户键入旧URL,他们只需转发到新URL,一切正常。



有人知道Flask中是否可以这样做吗?

提前感谢您的帮助: - )

2 个答案:

答案 0 :(得分:17)

这样的事情应该让你开始:

from flask import Flask, redirect, request

app = Flask(__name__)

redirect_urls = {
    'http://example.com/old/': 'http://example.com/new/',
    ...
}

def redirect_url():
    return redirect(redirect_urls[request.url], 301)

for url in redirect_urls:
    app.add_url_rule(url, url, redirect_url)

答案 1 :(得分:4)

另一种方法是将旧网址的处理程序更改为只是显式重定向。

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/new')
def new_hotness():
    return 'Sizzle!'

@app.route('/old')
def old_busted():
    return redirect(url_for('new_hotness'))

如果您已经拥有旧网址的处理程序,那么您可能会发现最简单的事情就是上面的内容,即只需用以下内容替换正文:

return redirect(url_for('new_hotness'))

然而,Radomir的答案可能更为可取,特别是如果你有很多新旧的URL映射。