Django项目Apache+WSGI部署:根URL自动添加尾斜杠问题
解决Apache+WSGI部署Django时自动添加尾斜杠失效的问题
我来帮你搞定这个自动加尾斜杠的问题,这在Apache搭配WSGI部署Django时确实是个容易踩的小坑,咱们一步步排查解决:
1. 先确认Django核心配置是否正确
首先得确保Django本身的自动加斜杠开关是打开的——默认情况下APPEND_SLASH是True,但万一被误改了呢?打开你的项目settings.py,找一下这个配置:
# settings.py APPEND_SLASH = True
如果它被设成了False,改回True就行,这是Django实现自动重定向的基础。
2. 检查Apache的别名与WSGI配置
因为你用了项目别名myProject,Apache的配置必须确保不带尾斜杠的请求能正确传递给Django处理,而不是被Apache自己拦截或处理成静态目录。
正确的配置示例:
# Apache配置文件(比如/etc/apache2/sites-available/your-site.conf) # 静态文件别名配置 Alias /myProject/static /path/to/your/myProject/static <Directory /path/to/your/myProject/static> Require all granted </Directory> # WSGI脚本映射,这是关键! WSGIScriptAlias /myProject /path/to/your/myProject/wsgi.py process-group=myProject application-group=%{GLOBAL} <Directory /path/to/your/myProject> <Files wsgi.py> Require all granted </Files> # 禁止Apache自动处理目录斜杠,交给Django处理 DirectorySlash Off </Directory>
这里的重点是:
WSGIScriptAlias直接把/myProject映射到wsgi.py,确保所有/myProject开头的请求(不管带不带斜杠)都交给Django- 加上
DirectorySlash Off,避免Apache自己对无斜杠的URL做重定向,抢了Django的活儿
3. 验证Django的URL配置
你的主urls.py需要能匹配到/myProject(不带斜杠)的请求,这样Django才会触发APPEND_SLASH的重定向逻辑。
假设你的WSGIScriptAlias是/myProject,那么Django的URLconf里的根路径就是对应/myProject的,所以主urls.py应该是这样的:
# urls.py from django.urls import path, include from . import views urlpatterns = [ # 空路径对应/myProject(不带斜杠)和/myProject/(带斜杠) path('', views.home, name='home'), # 其他应用的URL可以用include导入 path('blog/', include('blog.urls')), ]
注意不要在URL里重复写myProject,因为WSGIScriptAlias已经帮你做了路径映射。
4. 最后一步:生效配置并测试
- 重启Apache服务,让配置生效:
sudo systemctl restart apache2 # 如果你用的是CentOS/RHEL,换成httpd - 清空浏览器缓存(或者用curl测试,避免缓存干扰):
如果看到返回curl -v http://example.com/myProject301 Moved Permanently,并且Location指向http://example.com/myProject/,就说明成功了!
内容的提问来源于stack exchange,提问作者floatingpurr
相关产品推荐
相关产品推荐

