2017-02-26 13 views
0

私はdjangoシングルページアプリケーションを持っています。現在、存在しないサイトのURLにアクセスすると、404エラーが表示されます。しかし、この場合、私はサイトのホームページにリダイレクトしたい。私はNginxでこれを行う方法が必要かどうか、またはDjango内でこれを行う方法があるかどうかはわかりません。 Nginxファイルが添付されています。私は以下の設定を使ってみましたが、うまくいきませんでした。Nginxを使ってDjangoのシングルページアプリで404リクエストをホームページにリダイレクトする方法は?

error_page 404 = @foobar; 

location @foobar { 
    return 301 /webapps/mysite/app/templates/index.html; 
} 


upstream mysite_wsgi_server { 
    # fail_timeout=0 means we always retry an upstream even if it failed 
    # to return a good HTTP response (in case the Unicorn master nukes a 
    # single worker for timing out). 

    server unix:/webapps/mysite/run/gunicorn.sock fail_timeout=0; 
} 

server { 
    listen  80; 
    server_name kanjisama.com; 
    rewrite ^https://$server_name$request_uri? permanent; 
} 

server { 
    listen    443; 
    server_name   kanjisama.com; 
    ssl on; 
    ssl_certificate  /etc/letsencrypt/live/kanjisama.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/kanjisama.com/privkey.pem; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 

    client_max_body_size 4G; 

    access_log /webapps/mysite/logs/nginx_access.log; 
    error_log /webapps/mysite/logs/nginx_error.log; 

    location /static/ { 
     alias /webapps/mysite/app/static/; 
    } 

    location /media/ { 
     alias /webapps/mysite/media/; 
    } 

    location/{ 
     if (-f /webapps/mysite/maintenance_on.html) { 
      return 503; 
     } 

     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_set_header Host $host; 
     proxy_redirect off; 

     # Try to serve static files from nginx, no point in making an 
     # *application* server like Unicorn/Rainbows! serve static files. 
     if (!-f $request_filename) { 
      proxy_pass http://mysite_wsgi_server; 
      break; 
     } 

    # Error pages 
    error_page 500 502 504 /500.html; 
    location = /500.html { 
     root /webapps/mysite/app/mysite/templates/; 
    } 

    error_page 503 /maintenance_on.html; 
    location = /maintenance_on.html { 
     root /webapps/mysite/; 
    } 

    error_page 404 = @foobar; 

    location @foobar { 
     return 301 /webapps/mysite/app/templates/index.html; 
    } 
} 

答えて

1

まず、すべての404要求を処理するビューを作成します。

# views.py 

from django.shortcuts import redirect 

def view_404(request): 
    # make a redirect to homepage 
    # you can use the name of url or just the plain link 
    return redirect('/') # or redirect('name-of-index-url') 

第二に、プロジェクトのurls.pyに次のように置く:

handler404 = 'myapp.views.view_404' 
# replace `myapp` with your app's name where the above view is located at 
関連する問題