Apache 2.4将子目录设为根目录:POST请求配置失效问题
Apache 2.4 配置子目录为主访问URL(POST请求修复方案)
你的配置存在几个冲突点,直接导致POST请求无法正常工作:
- DocumentRoot与Alias指向同一目录,Apache处理请求时会混淆根路径和
/test路径的路由逻辑 - RewriteBase设置为
/,和你期望的/test基准路径不匹配,重写规则无法正确将请求映射到目标脚本
修改后的正确配置
<VirtualHost *:80> ServerName myapp.test # 将DocumentRoot设为无关空目录,避免根路径访问干扰 DocumentRoot "C:/Users/Username/Desktop/webapp/empty/" # 映射/test路径到你的业务web目录 Alias "/test" "C:/Users/Username/Desktop/webapp/web/" <Directory "C:/Users/Username/Desktop/webapp/web/"> RewriteEngine on # 重写基准与Alias路径对齐,设为/test/ RewriteBase /test/ # 静态文件/目录直接访问,否则转发到index.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] DirectoryIndex index.php Require all granted </Directory> # 可选:访问根路径(myapp.test)时自动重定向到/test <Directory "C:/Users/Username/Desktop/webapp/empty/"> RewriteEngine on RewriteRule ^(.*)$ /test/$1 [R=302,L] </Directory> </VirtualHost>
关键修改说明
- DocumentRoot调整:避免根路径和
/test路径的资源冲突,确保Apache仅通过Alias处理/test下的请求 - RewriteBase修正:设为
/test/后,重写规则会基于/test路径解析请求,保证/test/xxx这类请求能正确找到web目录下的index.php - 保留[L]标记:确保匹配规则后停止后续处理,避免不必要的跳转,防止POST请求因重定向丢失数据
验证步骤
- 创建
C:/Users/Username/Desktop/webapp/empty/空目录(若不存在) - 替换配置后重启Apache服务
- 测试POST请求到
http://myapp.test/test/xxx,此时请求会正确转发到目标脚本,POST数据可正常接收
内容的提问来源于stack exchange,提问作者LuZa
相关产品推荐
相关产品推荐

