如何在Python Django-Nginx服务器将已索引失效URL重定向至新URL?
解决AWS Nginx服务器上Django项目旧URL重定向问题
针对你遇到的旧URL访问404问题,推荐两种高效的解决方式——robots.txt仅用于告知爬虫爬取规则,无法处理重定向,所以之前的操作无效是正常的:
方法一:通过Nginx配置直接处理(推荐,性能更高)
Nginx直接拦截旧URL并返回重定向,无需经过Django,适合单个或少量重定向场景:
- 找到你的Nginx站点配置文件,通常位于
/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下(比如文件名为example.conf) - 在
server块内添加301永久重定向规则(301会告知搜索引擎更新索引,优先使用):server { # 保留原有配置(如listen、server_name、location等) # 单个旧URL重定向到新URL rewrite ^/logistics-services-odisha$ /logistics-services-in-odisha permanent; # 若有多个旧URL,依次添加即可 # rewrite ^/old-page-1$ /new-page-1 permanent; # rewrite ^/old-page-2$ /new-page-2 permanent; } - 验证配置语法:
sudo nginx -t,输出test is successful后重启Nginx:sudo systemctl restart nginx
方法二:在Django项目中处理重定向
适合需要和Django路由逻辑结合,或大量重定向的场景:
- 打开项目主
urls.py(或对应APP的urls.py),导入必要模块:from django.urls import path from django.shortcuts import redirect - 在
urlpatterns列表中添加旧URL的路由规则,直接返回重定向:urlpatterns = [ # 保留原有路由配置 # 旧URL重定向到新URL,permanent=True对应301永久重定向 path('logistics-services-odisha/', lambda request: redirect('/logistics-services-in-odisha/', permanent=True)), # 多个重定向同理添加 # path('old-page-1/', lambda request: redirect('/new-page-1/', permanent=True)), ] - 重启Django应用服务(如gunicorn、uwsgi等),例如:
sudo systemctl restart gunicorn
补充说明
- 优先选择Nginx层面的重定向,减少Django请求处理开销
- 301永久重定向会让谷歌等搜索引擎逐步更新索引,替换旧链接为新链接
- 若有大量旧URL需要批量处理,可使用Nginx的
map指令或Django自定义重定向中间件来简化配置
内容的提问来源于stack exchange,提问作者Saranya TR
相关产品推荐
相关产品推荐

