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
相关产品推荐
相关产品推荐

