Apache+mod_wsgi部署Django网站仅首页可访问,其他页面404求助
解决Django+Apache+mod_wsgi部署后非首页404问题
以下是针对Windows VPS上该问题的排查和解决步骤:
检查Apache配置文件的请求转发规则
打开Apache的httpd.conf或你的虚拟主机配置文件,确保所有非静态文件的请求都正确转发到Django的WSGI入口:# 核心WSGI映射,将根路径请求指向项目的wsgi.py WSGIScriptAlias / "C:/path/to/your/django-project/wsgi.py" # 授权访问wsgi.py所在目录 <Directory "C:/path/to/your/django-project"> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件映射,确保静态资源能被正确访问 Alias /static/ "C:/path/to/your/django-project/static/" <Directory "C:/path/to/your/django-project/static/"> Require all granted </Directory>注意路径要使用Windows格式的斜杠(
/),不要用反斜杠避免转义问题。保存配置后重启Apache服务。验证Django的URL配置
打开项目根目录下的urls.py,确认非首页路径(比如about)已正确配置:- 如果是直接在根urls里定义:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), path('about/', views.about, name='about'), # 确保这条规则存在且路径拼写正确 ] - 如果是引用app的urls,要确保已正确使用
include:from django.urls import path, include urlpatterns = [ path('', views.home, name='home'), path('about/', include('yourapp.urls')), # 替换成你的app名称 ]
同时检查对应app的
urls.py里是否有匹配about的规则,以及视图函数是否存在且无语法错误。- 如果是直接在根urls里定义:
检查Apache的mod_rewrite模块是否启用
打开httpd.conf,找到以下行,去掉开头的注释符号(#):LoadModule rewrite_module modules/mod_rewrite.so启用该模块后重启Apache,确保URL重写功能正常,避免Apache拦截动态请求。
查看Apache错误日志定位具体问题
打开Apache的错误日志文件(默认路径为C:\Apache24\logs\error.log),查找关于/about路径的错误记录。日志会明确提示是路径映射问题、权限问题还是Django内部错误,根据日志信息针对性修复。确认Django生产环境配置正确
- 确保
settings.py中DEBUG = False(生产环境必须关闭),同时ALLOWED_HOSTS包含localhost或你的服务器IP(比如ALLOWED_HOSTS = ['localhost', 'xxx.xxx.xxx.xxx'])。 - 已经执行过
python manage.py collectstatic命令,将所有静态文件收集到STATIC_ROOT指定的目录,并且Apache的静态文件映射路径与STATIC_ROOT一致。
- 确保
内容的提问来源于stack exchange,提问作者bahar bendokht
相关产品推荐
相关产品推荐

