You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django路由在PlanetHoster远程服务器无法正常工作求助

解决Django部署到PlanetHoster后allauth路由异常问题

从你的描述来看,本地测试一切正常,但部署到PlanetHoster后遇到的路由问题,核心原因是你的应用被部署在了子路径(my_domain/my_app/)下,而Django和allauth默认是按根路径(/)来处理路由和重定向的。下面是针对性的解决方案:

1. 配置Django的子路径前缀

首先要告诉Django你的应用运行在子路径下,在settings.py中添加:

FORCE_SCRIPT_NAME = '/my_app'  # 这里替换成你实际的子路径部分

这个配置会让Django在生成所有URL时自动加上这个前缀,解决重定向跳转到根域名的问题。

2. 修正allauth的路由和重定向配置

调整urls.py的路由写法

把allauth的路由改成更简洁的path写法(虽然re_path也能工作,但path更符合Django3+的最佳实践),同时保留根视图:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.http import HttpResponse
from machina import urls as machina_urls
from allauth.account import views

def empty_view(request):
    return HttpResponse("Empty View")

urlpatterns = [
    path('', empty_view, name='empty_view'),  # 保留这个根视图,避免路由解析混乱
    path('admin/', admin.site.urls),  # 注意这里加了斜杠,避免访问admin时出现重定向问题
    path('account/', include('allauth.urls')),
]

更新settings里的重定向URL

把所有重定向路径改成包含子前缀的绝对路径,或者用FORCE_SCRIPT_NAME动态生成:

# 方式一:直接写绝对路径(直观)
LOGIN_URL = '/my_app/account/login'
LOGIN_REDIRECT_URL = '/my_app/projects/project/'
ACCOUNT_LOGOUT_REDIRECT_URL = "/my_app/account/login"

# 方式二:用FORCE_SCRIPT_NAME动态生成(更灵活,子路径变化时无需逐一修改)
LOGIN_URL = f"{FORCE_SCRIPT_NAME}/account/login"
LOGIN_REDIRECT_URL = f"{FORCE_SCRIPT_NAME}/projects/project/"
ACCOUNT_LOGOUT_REDIRECT_URL = f"{FORCE_SCRIPT_NAME}/account/login"

3. 为什么启用empty_view后就正常?

当你没有根路径视图时,Django在解析my_domain/my_app/时,会把/my_app/当作根路径来匹配路由,导致allauth的account/路由解析出现混乱。而添加根视图后,Django能明确区分根路径和子路由,account/的解析就会正常工作。所以建议保留这个根视图(或者替换成你实际的首页视图)。

4. 检查PlanetHoster的部署配置

确认PlanetHoster的控制面板或.htaccess配置中,是否把你的Django应用正确映射到了/my_app子路径下。比如如果用WSGI部署,确保WSGI脚本的SCRIPT_NAME设置和你在Django中配置的FORCE_SCRIPT_NAME一致。

验证步骤

修改完成后重新部署应用,测试以下场景:

  • 访问my_domain/my_app/account/login/应该正常显示登录页面
  • 登录成功后会正确跳转到/my_app/projects/project/
  • 访问my_domain/my_app/不会再出现路由匹配错误
  • 访问my_domain/my_app/account/会显示allauth的账号相关路由列表(如果没有自定义account首页的话,会提示空路径不匹配,这是正常的,因为allauth的account/下需要具体的子路由比如login/、signup/)

内容的提问来源于stack exchange,提问作者Scenarmag Scenarmag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:47:39