Python 301使用Flask将旧URL重定向到新URL

Python 301使用Flask将旧URL重定向到新URL,python,redirect,flask,Python,Redirect,Flask,我最近改变了我的URL的格式,以提高可读性和搜索引擎优化。但是,这将破坏我当前的URL。所以我想在烧瓶中重定向它们 我的问题与这里的问题类似: 然而,所提供的答复是: redirect_urls = { '/article/old-url': '/article/new-url/id', '/article/old-url-2': '/article/new-url-2/id', '/article/old-url-3': '/article/new-url-3/id'

我最近改变了我的URL的格式,以提高可读性和搜索引擎优化。但是,这将破坏我当前的URL。所以我想在烧瓶中重定向它们

我的问题与这里的问题类似:

然而,所提供的答复是:

redirect_urls = {
    '/article/old-url': '/article/new-url/id',
    '/article/old-url-2': '/article/new-url-2/id',
    '/article/old-url-3': '/article/new-url-3/id',
    ...
}

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

for url in redirect_urls:
    app.add_url_rule(url, url, redirect_url)
问题是,该代码给出了500个错误代码

KeyError:“/article/old url”

编辑:

完全回溯错误:

Exception on /article/old-url [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.4/dist-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/*****/mysite/flask_app.py", line 77, in redirect_url
    return redirect(redirect_urls[request.url], 301)
KeyError: 'https://www.example.com/article/old-url'

正如克劳斯在上面所写的,只需将@route decorator添加到您的方法中,如:

@app.route('/article/old-url', methods=['GET'])
def redirect_url():
    return redirect(redirect_urls[request.url], 301)

那么这个问题呢,

  File "/home/*****/mysite/flask_app.py", line 77, in redirect_url
    return redirect(redirect_urls[request.url], 301)
KeyError: 'https://www.example.com/article/old-url'
是由于以下词典导致的

redirect_urls = {
    '/article/old-url': '/article/new-url/id',
    '/article/old-url-2': '/article/new-url-2/id',
    '/article/old-url-3': '/article/new-url-3/id',
    ...
}
只有子路径

要解决这个问题,您可以采取的一种方法是

BASE_URL = 'https://www.example.com'
return redirect(redirect_urls[request.url.replace(BASE_URL, '')], 301)
这将最终执行字典
重定向\u URL
中的以下操作

return redirect(redirect_urls['/article/old-url'], 301)

您只需在视图中添加另一个
路由
装饰程序。6个月后,您仍然需要回答这个问题:/此外,我需要一种方法重定向多个URL,而不仅仅是一个URL。