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

为何Docker容器中部分PHP页面无法加载?

解决PHP容器化后非index.php页面404问题

可能的原因及对应解决方法

1. 文件权限与所有权问题

容器中Apache以www-data用户运行,若项目文件所有权为root,会导致Apache无法正常读取文件。

修改Dockerfile,添加权限配置:

FROM php:8.2.5-apache as php

WORKDIR /var/www/html

COPY ./ ./

# 将文件所有权设置为Apache运行用户
RUN chown -R www-data:www-data /var/www/html
# 配置目录和文件的可读可执行权限
RUN chmod -R 755 /var/www/html

EXPOSE 80

2. Apache重写模块与.htaccess配置缺失

本地Mac默认Apache通常开启了mod_rewrite模块,并允许.htaccess覆盖规则,但官方php:apache镜像默认未开启这些配置,若你的网站依赖.htaccess规则(哪怕是直接访问.php文件),就会出现404。

修改Dockerfile,开启模块并调整Apache配置:

FROM php:8.2.5-apache as php

WORKDIR /var/www/html

COPY ./ ./

# 启用mod_rewrite模块
RUN a2enmod rewrite

# 修改Apache主配置,允许/var/www/html目录下的.htaccess生效
RUN sed -i '/<Directory \/var\/www\/html\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

# 配置文件权限
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html

EXPOSE 80

3. 验证配置有效性

构建新镜像并启动容器后,可进入容器检查配置是否生效:

# 进入容器
docker exec -it <container_id> bash
# 检查mod_rewrite是否开启
apache2ctl -M | grep rewrite
# 查看目录权限配置
cat /etc/apache2/apache2.conf | grep -A 10 "<Directory /var/www/html/>"

4. 无后缀URL适配(若适用)

如果你的网站使用无后缀URL(如访问/about而非/about.php),需确保.htaccess中有重写规则,示例:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:12