gpt4 book ai didi

python - 如何使用 Nginx 将 404 请求重定向到 Django 单页应用程序中的主页?

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:58 24 4
gpt4 key购买 nike

我有一个 Django 单页应用程序。当前,当您访问网站上不存在的 URL 时,会显示 404 错误。但是,在这种情况下,我想重定向到网站的主页。我不确定我是否应该如何使用 Nginx 执行此操作,或者是否有办法在 Django 中执行此操作?下面附上我的 Nginx 文件。我尝试使用以下设置,但没有用。

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

最佳答案

首先,创建一个 View 来处理所有 404 请求。

# views.py

from django.shortcuts import redirect

def view_404(request, exception=None):
# 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

关于python - 如何使用 Nginx 将 404 请求重定向到 Django 单页应用程序中的主页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42469306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com