Django对URL的重写处理(rewrite)

问题:
在访问网站时,如果url以 ‘ / ’ 结尾,可以正常访问;http://www.example.com/ex/
如果没有以 ‘ / ’ 结尾,就会跳转至首页。 http://www.example.com/ex

解决:
改写URLconf里首页url的匹配模式,限制结尾。
改前:url(r'^', views.index, name='index'),
改后:url(r'^$', views.index, name='index'),

解析:

  1. url(r'^', views.index, name='index'),
    表示域名后带有任何字符都可以匹配到
    url(r'^$', views.index, name='index'),
    表示域名后不带任何字符才能匹配到
  2. Django的默认设置中,启用了CommonMiddleware中间件,并APPEND_SLASH = True。
    这代表如果请求的URL没有以斜杠结束,并且在URLconf中没有匹配到,那么Django会在URL末尾添加斜杠,重写URL,形成新的URL。如果在URLconf中找到这个新URL,则Django将请求重定向到这个新URL(实现自动补全斜杠跳转)。否则,初始URL将照常处理(匹配不到,引发404)。
  3. 注:Django建议URLconf应该在末尾写 ‘ / ’
    正确的:url(r'^blog/$', views.index, name='index'),
    错误的:url(r'^/blog$', views.index, name='index'),
    不规范的:url(r'^blog', views.index, name='index'),

你可能感兴趣的:(Django对URL的重写处理(rewrite))