Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将mod_rewrite添加到Docker映像httpd:alpine_Docker_Mod Rewrite_Apache2_Alpine_Apache2 Module - Fatal编程技术网

将mod_rewrite添加到Docker映像httpd:alpine

将mod_rewrite添加到Docker映像httpd:alpine,docker,mod-rewrite,apache2,alpine,apache2-module,Docker,Mod Rewrite,Apache2,Alpine,Apache2 Module,老实说,我几乎没有使用Alpine Linux的经验,但我喜欢它的方法,因此想改变这一点。我对Docker也比较陌生,所以如果这是一个“愚蠢”的问题,请容忍我 我想要实现的是在httpd:alpine图像的基础上,扩展httpd以满足我的需要 这将包括激活mod_重写模块并将自定义的.htaccess复制到映像中 以下是我到目前为止的情况: FROM httpd:alpine # Copy .htaccess into DocumentRoot COPY ./.htaccess /var/ww

老实说,我几乎没有使用Alpine Linux的经验,但我喜欢它的方法,因此想改变这一点。我对Docker也比较陌生,所以如果这是一个“愚蠢”的问题,请容忍我

我想要实现的是在
httpd:alpine
图像的基础上,扩展httpd以满足我的需要

这将包括激活mod_重写模块并将自定义的.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 not found”错误,我不知道如何解决。这可能是因为a2enmod是一个纯Debian/Ubuntu/。。。但我不知道激活mod_rewrite(或任何模块)的其他方法


非常感谢大家的支持

mod_rewrite
默认情况下随apache一起安装在alpine中,因此无需再次安装。下面是如何在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_重写:

    LoadModule rewrite\u module modules/mod\u rewrite.so

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

    允许覆盖所有内容

从容器中下载httpd.conf,更改此值,然后在将映像构建到同一目录时上载新的httpd.conf是一种很好的做法:

比如说

  • 提取httpd.conf docker run--rm-httpd:2.4 cat/usr/local/apache2/conf/httpd.conf>my-httpd.conf

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


非常感谢您的快速回复!我完全按照您在回答中提供的内容进行了更改,但仍然无法使其正常工作。可以构建docker映像并运行容器,但重写规则不起作用。我猜是“AllowOverride”指令丢失了?如果是,我将如何通过sed激活它?为了进一步参考,我将把.htaccess的内容放在这里:
Options+FollowSymLinks
RewriteEngine on
RewriteRule^(.*)$https://www.youtube.com [R=301,L]
(是的,我想从现在起将对我服务器的呼叫转发到youtube。)@阿奇瓦尔:这篇文章没有解决你的问题,因为我看到它对你不起作用。请不要将其标记为正确答案。@DockerFile上面的Archivar yes不适用于我。请不要将其标记为正确。也许在2018年4月,一切都起了作用,也许从那时起事情发生了变化,也许你不应该只是简单地复制和粘贴,甚至不尝试理解正在发生的事情——但也许答案只是错了。lolthis帮助了我,我同意在运行a2enmod时重写dockerfile并成功。