web-dev-qa-db-ja.com

Apachedockerコンテナ-無効なコマンド 'RewriteEngine'

Dockercomposeを使用しています。ただし、「docker-compose up」を実行すると、次のエラーが発生しました:/var/www/html/.htaccess:無効なコマンド「RewriteEngine」。

どこで失敗したのか教えてもらえますか?

プロジェクトアーキテクチャ:

project-name /
             / docker-compose.yml
             / Dockerfile
             / Apache.conf
             / php.ini
             / src /
                   / index.php
                   / .htaccess

docker-compose.yml:

web:
    build: .
    ports:
        - "80:80"
    volumes:
        - ./src:/var/www/html
        - php.ini:/usr/local/etc/php/conf.d/30-custom.ini
        - Apache.conf:/etc/Apache2/sites-enabled
    environment:
        - ALLOW_OVERRIDE=true

Dockerfile:

FROM php:7.0-Apache

RUN a2enmod rewrite

RUN service Apache2 restart

ADD ./src /var/www/html

php.ini:

display_errors=1
error_reporting=E_ALL

Apache.conf(私のIPアドレスを使用):

<VirtualHost *:80>
    ServerName xxx.xxx.xx.xxx
    DocumentRoot /var/www/html
</VirtualHost>

コマンドラインに入力します:

docker@default:/blabla/project-name$ docker-compose up

それは私を返します:

AH00558: Apache2: Could not reliably determine the server's fully 
qualified domain name, using xxx.xx.x.x. Set the 'ServerName' directive 
globally to suppress this message

そして

/var/www/html/.htaccess: Invalid command 'RewriteEngine', 
perhaps misspelled or defined by a module not included in the server
configuration

そしてブラウザで、私のIPアドレスで( http://xxx.xxx.xx.xxx/ ):

500 Internal servor error

私の.htaccess:

<files .htaccess>
    Require all denied
</files>
Options +FollowSymlinks -Indexes -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$   /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]

私はWindowsを使用しており、Oracle VM VirtualBoxを使用しています。

前もって感謝します !

編集:私が書き換えルールを削除すると、すべてが機能すると言うべきです。

14
HeyDaddy

これは私のために働きます:

# Dockerfile
FROM php:5.6-Apache

MAINTAINER Raphael Mäder <[email protected]>

RUN a2enmod rewrite

ADD . /var/www/html

以前にイメージをビルドしたことがある場合は、docker-compose upコマンドを--buildで実行することを忘れないでください。そうしないと、RUN a2enmod rewriteステートメントが含まれていない可能性のある古いイメージが実行されます。

26
Raphael Mäder

これをDockerfileに追加します。

# Enable mod_rewrite for images with Apache
RUN if command -v a2enmod >/dev/null 2>&1; then \
        a2enmod rewrite headers \
    ;fi
0