Django 1.3 URL重写

发布时间:2020-01-17 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了Django 1.3 URL重写 编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Django具有CommonMiddleware设置,默认情况下会在不以1结尾的URL后面加上斜杠.

例如:
(1)如果在URLconf中检测到/ admin /存在,则将http://www.example.com/admin重写为(2)http://www.example.com/admin/.

但是,我得到的情况不是(2),而是(3)http://www.example.com//admin/,这给了我404错误.

这是正确的行为吗?解决404错误的一种方法是什么?
非常感谢.

注意:
我正在Django 1.3 nginx gunicorn上运行.
我尝试使用Django 1.3 nginx apache mod_wsgi运行,我也得到了(3)(因此这不是网络服务器的问题),但没有得到404错误.

================================================== ====================

更新:

问题出在nginx配置上,我写了将HTTP请求重定向到HTTPS的配置.
以下是带有错误的nginx配置的示例:

upstream django {
    server 127.0.0.1:8000;
}

server {
    listen  80; 
    server_name www.example.com;

    location / { 
        rewrite (.*) https://www.example.com/$1 permanent;
    }   
}

server {
    listen       443;
    server_name  www.example.com;

    ssl                  on;
    ssl_certificate      /home/user/certs/example.com.chained.crt;
    ssl_certificate_key  /home/user/certs/example.com.key;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout  5m;

    location ~ ^/static/(.*)${
        alias /home/user/deploy/static/$1;
        access_log off;
        expires max;
    }

    location / {
        try_files $uri $uri/ @django_proxy;
    }

    location @django_proxy {
        proxy_pass          http://django;
        proxy_redirect      off;    
        proxy_set_header    Host                 $host;          
        proxy_set_header    X-Real-IP            $remote_addr;   
        proxy_set_header    X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Protocol    https;  
    }
}

发生的是CommonMiddleware从https://www.example.com/admin重定向到http://www.example.com/admin/.再次击中nginx,并按照配置文件中的指定将URL重写为https://www.example.com/ $1,其中$1为“ / admin /”.这意味着最终的URL是https://www.example.com//admin/.

为了解决这个问题,我将重写规则更改为:

server {
    listen  80; 
    server_name www.example.com;

    location / { 
        rewrite /(.*) https://www.example.com/$1 permanent;
    }   
}
最佳答案
“这是正确的行为吗?”不,这不对.在使用Django的4年中,我从未见过这个特殊的问题.

测试CommonMiddleware导致这种情况的一种方法是在您的settings.py文件中将其注释掉,重新启动,然后查看是否出现相同的行为.使用独立的开发服务器并在有趣的地方粘贴指纹以查看谁在处理它也可能很有帮助.

总结

以上是编程之家为你收集整理的Django 1.3 URL重写 全部内容,希望文章能够帮你解决Django 1.3 URL重写 所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!