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

Django应用空URL可访问,但子路径无法路由至Apache服务器

解决Apache共享主机下Django子路径路由404问题

你的问题核心是Apache没有将/app/search/、/app/admin/这类子路径请求转发给Django的WSGI应用,而是直接尝试查找服务器上的文件/目录,找不到就返回Apache原生的404页面。以下是具体解决步骤:

1. 配置.htaccess转发规则

在你的Django应用根目录(即存放passenger_wsgi.py的目录)创建或修改.htaccess文件,添加以下重写规则:

RewriteEngine On
# 跳过实际存在的文件和目录(比如静态文件)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将所有非文件/目录的请求转发给Passenger WSGI入口
RewriteRule ^(.*)$ passenger_wsgi.py/$1 [L]

这个规则的作用是:只有当请求的路径不是真实存在的文件或目录时,才把请求交给Django处理,确保静态文件可以被Apache直接访问,同时动态路由由Django接管。

2. 修正Django的子路径配置

在项目的settings.py中添加/修改以下配置,适配/app/子路径部署:

# 设置应用的根路径前缀
FORCE_SCRIPT_NAME = '/app'

# 调整静态文件和媒体文件的URL前缀
STATIC_URL = '/app/static/'
MEDIA_URL = '/app/media/'

# 确保静态文件收集的根目录正确(根据你的主机配置调整)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

配置完成后,运行python manage.py collectstatic将静态文件收集到STATIC_ROOT目录,确保Apache能正确访问后台管理页面的静态资源。

3. 检查passenger_wsgi.py的路径配置

确认passenger_wsgi.py能正确找到你的Django项目,修改为以下内容(如果原有配置路径不正确):

import os
import sys

# 将项目根目录添加到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# 设置Django配置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

验证修改

完成上述配置后,通过主机控制面板重启Apache(或等待共享主机自动生效),再访问domain.com/app/search/和domain.com/app/admin/,应该就能正常路由到Django对应的视图了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:52