老实说,我对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.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