我正在重新设计一个正在从 ASPX 转换为 Django 的网站。我们想像这样重定向旧网址:
/detail.aspx?ID=123
...到...
/文章/123
问题出在 url 模式匹配上。我想像这样匹配旧网址的模式:
(r'^detail.aspx?ID=(?P\d+)$', 'mygreatview'),
...然后在 View 中执行 301 重定向:
def mygreatview(request, url_id):
article = get_object_or_404(Article, url_id=url_id)
url = '/articles/' + article.url_id
return HttpResponsePermanentRedirect(url)
问题是 Django 附加了一个斜杠,所以旧的 url 被转换为:
/detail.aspx/?ID=123
...在它被 urls.py 解释之前。
我尝试设置 APPEND_SLASH = False,但这似乎会导致其他网址出现其他问题(在这里挤压气球)。
我错过了什么?我应该使用 Apache 和 mod_rewrite 来处理这种情况吗?
提前致谢。
最佳答案
那不是你的问题。您的问题是查询参数 (?ID=123
) 不是 URL 的一部分。您应该只匹配 /detail.aspx/
并使用 request.GET['ID']
在 View 中获取参数。
实际上,您根本不应该这样做。这种重定向级别由您的 Web 服务器配置处理得更好,例如使用 Apache 中的 mod_rewrite。无需调用 Django View 的开销来执行此类操作。
关于python - 如何以 SEO 友好的方式将 .aspx 页面重定向到 django 站点上的新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587164/