如何将.aspx页面重定向到Django站点上的新页面

2024-09-28 21:51:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在重新设计一个网站,它正在从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来处理这个场景吗?在

提前谢谢。在


Tags: djangoidurl网站article文章模式详细信息
3条回答

那不是你的问题。您的问题是查询参数(?ID=123)不是URL的一部分。您应该只与/detail.aspx/匹配,并使用request.GET['ID']获取视图中的参数。在

实际上,你根本不应该那样做。这种级别的重定向由web服务器配置处理得更好,例如在Apache中使用mod_rewrite。没有必要调用Django视图的开销来执行这种操作。在

我有这个工作,但我仍然不完全满意它b/c这是一个“2步跳”的搜索引擎优化机器人。我得到的是:

在Apache conf中:

RedirectMatch 301 ^/detail\.aspx(.*) /article$1

这会将querystring作为参数发送到视图:

^{pr2}$

希望我能在1跳内完成,但我必须使用ID来查找slug。我不知道该怎么办,但应该没事。在

为什么不下面这些呢?(尚未测试)

RewriteCond %{QUERY_STRING} ^ID=(\w+)$
RewriteRule ^/detail.aspx /articles/%1?

有关更多示例,请参见http://wiki.apache.org/httpd/RewriteQueryString。在

这将获取旧的url并将它们重定向到django视图,就像它所期望的那样,而不必在django视图中添加任何黑客代码。在

相关问题 更多 >