Python 301使用Flask将旧URL重定向到新URL
我最近改变了我的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'
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。