php - docker httpd php .htacces 加载但 php 文件不加载
问题描述
我正在尝试使用 docker-compose 加载一个使用 .htaccess 启动的 php 应用程序。
如果我使用proxypassmatch,它可以工作,但仅适用于一条路线,一旦url更改,文件就找不到了(我读到proxypass/reverseproxy/proxypassmatch)不能与.htaccess一起使用......?
如果我使用带有虚拟主机的传统设置,.htaccess 正在工作,但 php 文件不加载,它的内容不会出现在屏幕上(无论路径如何)。
我花了这么多时间到处寻找没有任何答案......或者可能更改单个容器 php-httpd 的图像?但我喜欢把它们分开的想法。
如果有人知道如何解决它,那将非常感谢。
查看 docker-compose 文件
version: "3.2"
services:
php:
build: './php/'
volumes:
- ./MediterPourGrandir/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
- mysql
ports:
- "80:80"
volumes:
- ./MediterPourGrandir/:/var/www/html/
mysql:
image: mysql:5.6.40
#restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=monsupersite
- MYSQL_PASSWORD=root
ports:
- "3306:3306"
Apache Dockerfile
FROM httpd:2.4.33-alpine
RUN apk update; \
apk upgrade;
# Copy apache vhost file to proxy php requests to php-fpm container
RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf && \
sed -i 's#AllowOverride [Nn]one#AllowOverride All#' /usr/local/apache2/conf/httpd.conf
COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
RUN echo "Include /usr/local/apache2/conf/demo.apache.conf" \
>> /usr/local/apache2/conf/httpd.conf
阿帕奇配置文件
serverName localhost
<VirtualHost *:80>
DocumentRoot /var/www/html/
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Send apache logs to stdout and stderr
CustomLog /proc/self/fd/1 common
ErrorLog /proc/self/fd/2
</VirtualHost>
和 php Dockerfile
FROM php:7.2.7-fpm-alpine3.7
RUN apk update; \
apk upgrade;
RUN apk update --no-cache \
&& apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache mysql-dev \
&& docker-php-ext-install pdo pdo_mysql
解决方案
我终于改变了图像(我不喜欢,但看起来没有人知道如何处理这个图像,即使在 Docker 论坛上也是如此......),我使用它,php:7.2.1-apache
它工作得很好。查看 docker 文件的配置:running-virtual-hosts-in-apache-docker-container
我使用 docker-compose 将它连接到 mysql 的图像(就像以前一样)。
version: "3.2"
services:
php-apache:
build:
context: ./apache-php
ports:
- 80:80
volumes:
- ./MediterPourGrandir/:/var/www/html/
mysql:
image: mysql:5.6.40
#restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=monsupersite
- MYSQL_PASSWORD=root
ports:
- "3306:3306"
#volumes:
#- ./var/www/html/'monsupersite (1).sql':/docker-entrypoint-initdb.d/'monsupersite (1).sql'
推荐阅读
- ios - 动态类型“Body”样式在具有静态单元格的 UITableView 中不起作用
- python - ORA-00942 与 cx_Oracle
- parallel-processing - 并行计算字符总和
- caching - 您如何找到单级缓存的未命中惩罚?
- javascript - 如何在存储到数组中的 forEach 中返回响应/承诺?
- python - 无法获取列表的第一个和第二个元素
- while-loop - 如何在使用 SF 的简单命令式语言构造证明时使用 WHILE 循环构造函数
- if-statement - 如果条件和宏程序中的 proc sql
- git - git 在连接到 codecommit 时无法找到 aws 配置文件
- javascript - 无法在jquery中取消表单提交