将mod_rewrite添加到 Docker 镜像 httpd:alpine



老实说,我对Alpine Linux几乎没有经验,但我喜欢它的方法,因此想要改变它。我对 Docker 也比较陌生,所以如果这是一个"愚蠢"的问题,请耐心等待。

我想要实现的是建立在httpd:alpine映像的基础上,并根据我的需求扩展HTTPd。

这将包括激活mod_rewrite模块并将自定义 .htaccess 复制到映像中。

这是我到目前为止所拥有的:

FROM httpd:alpine
# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/
RUN apk update
RUN apk upgrade
RUN apk add apache2-utils
RUN a2enmod rewrite
RUN rc-service apache2 restart

我的问题是,我现在不断收到"找不到a2enmod"错误,我不知道如何解决。这可能是因为 a2enmod 是一个纯粹的 Debian/Ubuntu/...事情,但我不知道激活mod_rewrite(或任何与此相关的模块(的替代方法。

非常感谢大家的支持!

默认情况下,mod_rewrite 在 Alpine 中与 Apache 一起安装,因此无需再次安装。因此,以下是在 Alpine 中启用mod_rewrite的方法:

FROM httpd:alpine
# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/
RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf
RUN { 
  echo 'IncludeOptional conf.d/*.conf'; 
} >> /usr/local/apache2/conf/httpd.conf 
  && mkdir /usr/local/apache2/conf.d

我想你想要有有效的.htaccess重写机制。为此,您需要做两件事:

  • 在 httpd.conf 中,通过取消注释行来启用mod_rewrite:

    负载模块rewrite_module模块/mod_rewrite.so

  • 在 httpd.conf 中,将工作目录的 AllowOverride 更改为 All(不要更改每个 AllowOverpred,因为这是安全问题(

    允许覆盖全部

最好从容器下载 httpd.conf,

更改此值,然后在构建映像时将新的 httpd.conf 上传到同一目录:

例如

  • 摘录 httpd.confdocker run --rm httpd:2.4 cat/usr/local/apache2/conf/httpd.conf> my-httpd.conf

  • 上传新的 httpd.confon 构建过程:COPY ./my-httpd.conf/usr/local/apache2/conf/httpd.conf

相关内容

  • 没有找到相关文章

最新更新