我正在重新设计一个网站,它正在从ASPX转换为django。我们希望像这样重定向旧的URL:
在/详细信息.aspx?内径=123
…到。。。在
/文章/123
问题在于url模式匹配。我想匹配旧url的模式,如下所示:
(右)^详细信息.aspx?ID=(?P\d+$','mygreatview')
…然后在视图中执行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/?内径=123
…在它被解释之前网址.py. 在
我尝试设置APPEND_SLASH=False,但这似乎会导致其他url出现其他问题(这里压缩了baloon)。在
我错过了什么?我应该使用Apache和mod_rewrite来处理这个场景吗?在
提前谢谢。在
那不是你的问题。您的问题是查询参数(
?ID=123
)不是URL的一部分。您应该只与/detail.aspx/
匹配,并使用request.GET['ID']
获取视图中的参数。在实际上,你根本不应该那样做。这种级别的重定向由web服务器配置处理得更好,例如在Apache中使用mod_rewrite。没有必要调用Django视图的开销来执行这种操作。在
我有这个工作,但我仍然不完全满意它b/c这是一个“2步跳”的搜索引擎优化机器人。我得到的是:
在Apache conf中:
这会将querystring作为参数发送到视图:
^{pr2}$希望我能在1跳内完成,但我必须使用ID来查找slug。我不知道该怎么办,但应该没事。在
为什么不下面这些呢?(尚未测试)
有关更多示例,请参见http://wiki.apache.org/httpd/RewriteQueryString。在
这将获取旧的url并将它们重定向到django视图,就像它所期望的那样,而不必在django视图中添加任何黑客代码。在
相关问题 更多 >
编程相关推荐