使用docker-compose部署LAMP时如何配置.htaccess启用mod_rewrite
你之前找到的配置是针对纯httpd:alpine镜像的,你当前使用的php:7.3-apache属于Debian衍生版本,配置路径、模块启用命令均有区别,不要直接照搬对应的sed指令。
临时生效方案(仅适合测试,容器重建后配置会丢失)
你提到的docker exec方式可以实现临时配置,操作步骤如下:
- 进入运行中的php-apache容器:
docker exec -it linuxconfig_php-httpd_1 bash - 执行官方自带的模块启用命令开启rewrite:
a2enmod rewrite - 编辑Apache默认站点配置文件
/etc/apache2/sites-available/000-default.conf,在<VirtualHost *:80>块内DocumentRoot /var/www/html语句下方添加以下配置,允许.htaccess生效:<Directory /var/www/html> AllowOverride All </Directory> - 重启Apache服务:
service apache2 restart - 直接把你写好的.htaccess规则放到本地的
./DocumentRoot目录下即可,你已经做了目录挂载,本地修改会直接同步到容器内。
持久化生效方案(容器重建不会丢失配置,推荐正式使用)
方案1:无需编写Dockerfile,直接挂载配置文件
- 先从运行的容器里把默认站点配置复制到本地目录:
mkdir ./apache-conf docker cp linuxconfig_php-httpd_1:/etc/apache2/sites-available/000-default.conf ./apache-conf/ - 编辑本地的
./apache-conf/000-default.conf,按照上述方法添加AllowOverride All配置 - 修改你的
docker-compose.yml中php-httpd服务的配置,新增挂载项和启动命令:php-httpd: image: php:7.3-apache ports: - 80:80 volumes: - "./DocumentRoot:/var/www/html" # 挂载本地修改后的站点配置 - "./apache-conf/000-default.conf:/etc/apache2/sites-available/000-default.conf" # 启动时自动启用rewrite模块再运行Apache command: bash -c "a2enmod rewrite && apache2-foreground" - 重启服务生效:
sudo docker-compose down && sudo docker-compose up -d
方案2:编写自定义Dockerfile,适合长期维护的项目
- 在docker-compose.yml同级目录新建
Dockerfile,内容如下:FROM php:7.3-apache # 启用rewrite模块 RUN a2enmod rewrite # 复制修改后的站点配置到容器内 COPY ./apache-conf/000-default.conf /etc/apache2/sites-available/000-default.conf # 可选:如果不需要本地实时修改.htaccess,可直接复制到容器内 # COPY ./.htaccess /var/www/html/.htaccess - 修改
docker-compose.yml中php-httpd的配置,把image字段替换为build字段:php-httpd: build: . # 从当前目录的Dockerfile构建镜像 ports: - 80:80 volumes: - "./DocumentRoot:/var/www/html" - 启动时添加build参数自动构建镜像:
sudo docker-compose up -d --build
内容的提问来源于stack exchange,提问作者ikiK
相关产品推荐
相关产品推荐

