3 Stimmen

Django 1.3 URL-Umschreibung

Django hat CommonMiddleware eingerichtet, die standardmäßig einen Schrägstrich an URLs anhängt, die nicht mit einem Schrägstrich enden.

Zum Beispiel: (1) http://www.example.com/admin wird umgeschrieben zu (2) http://www.example.com/admin/ wenn es in der URLconf feststellt, dass /admin/ existiert.

Allerdings erhalte ich anstelle von (2) (3) http://www.example.com//admin/ was zu einer 404-Fehlermeldung führt.

Ist dieses Verhalten korrekt? Was wäre eine Möglichkeit, den 404-Fehler zu beheben? Ich danke Ihnen vielmals.

Anmerkung: Ich bin auf Django 1.3 + nginx + gunicorn ausgeführt. Ich habe versucht, mit Django 1.3 + nginx + apache + mod_wsgi laufen und ich bin immer (3) als gut (so es ist nicht ein Webserver-Problem), aber ich bekomme nicht die 404-Fehler.

\======================================================================

UPDATE:

Das Problem liegt in der nginx-Konfiguration, die ich geschrieben habe, um HTTP-Anfragen auf HTTPS umzuleiten. Im Folgenden finden Sie ein Beispiel der nginx-Konfiguration mit dem Fehler:

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;  
    }
}

Das Problem war, dass die CommonMiddleware eine Umleitung von https://www.example.com/admin a http ://www.example.com/admin/. Daraufhin wurde nginx erneut angesprochen, und die URL wurde wie in der Konfigurationsdatei angegeben umgeschrieben auf https://www.example.com/ $1, wobei $1 "/admin/" ist. Dies bedeutete, dass die endgültige URL wie folgt lautete https://www.example.com//admin/ .

Um dies zu korrigieren, änderte ich die Rewrite-Regel in:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X