Apache docker container - Invalid command 'RewriteEngine'

18,324

Solution 1

This works for me:

# Dockerfile
FROM php:5.6-apache

MAINTAINER Raphael Mäder <[email protected]>

RUN a2enmod rewrite

ADD . /var/www/html

Don't forget to run your docker-compose up command with --build if you have already built the image previously, otherwise it will run the old image which may have not included the RUN a2enmod rewrite statement.

Solution 2

Add this to your Dockerfile:

# Enable mod_rewrite for images with apache
RUN if command -v a2enmod >/dev/null 2>&1; then \
        a2enmod rewrite headers \
    ;fi
Share:
18,324
HeyDaddy
Author by

HeyDaddy

Updated on June 23, 2022

Comments

  • HeyDaddy
    HeyDaddy almost 2 years

    I use docker compose. However, when I run "docker-compose up", I came across an error : /var/www/html/.htaccess: Invalid command 'RewriteEngine'.

    Can you tell me where I fails ??

    Project architecture :

    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 (with my ip address) :

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

    I type in the command line :

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

    it returns me :

    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
    

    and

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

    and in the browser, in my ip address (http://xxx.xxx.xx.xxx/) :

    500 Internal servor error
    

    my .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]
    

    I'm on windows and i use Oracle VM Virtual Box.

    Thank you in advance !

    EDIT : I should say that if I delete rewrite rules, everything works.

  • Christian
    Christian almost 7 years
    Has anyone figured out how to do this FROM any of the httpd images? I'm more interested in an apache+mod_rewrite image as opposed to a apache+php+mod_rewrite image.