首页 > 解决方案 > 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

标签: phpapachedockerdocker-compose

解决方案


我终于改变了图像(我不喜欢,但看起来没有人知道如何处理这个图像,即使在 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'

推荐阅读