Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Apache2重写规则在image docker.io/library/php:7.4-apache的容器中不起作用_Php_Apache_Docker_Mod Rewrite_Containers - Fatal编程技术网

Apache2重写规则在image docker.io/library/php:7.4-apache的容器中不起作用

Apache2重写规则在image docker.io/library/php:7.4-apache的容器中不起作用,php,apache,docker,mod-rewrite,containers,Php,Apache,Docker,Mod Rewrite,Containers,主要问题: http://localhost/mysite/source/aphpfile.php有效 http://localhost/mysite/aphpfile尽管有运行aphpfile.php的重写规则,但仍不起作用 我尝试将服务器放置在容器中,从php:7.2-apache和php:7.4-apache容器图像中运行docker.io/library/。我在这两方面都有同样的问题。当我在本地尝试时,重写规则非常有效。我希望它能在容器中工作 磁盘上的文件夹结构(容器内): /var/w

主要问题:

http://localhost/mysite/source/aphpfile.php
有效

http://localhost/mysite/aphpfile
尽管有运行
aphpfile.php
的重写规则,但仍不起作用

我尝试将服务器放置在容器中,从
php:7.2-apache
php:7.4-apache
容器图像中运行
docker.io/library/
。我在这两方面都有同样的问题。当我在本地尝试时,重写规则非常有效。我希望它能在容器中工作

磁盘上的文件夹结构(容器内):

/var/www/html/mysite/source/aphpfile.php

不包括
.htaccess
文件

配置:

  • 未修改的
    /etc/apache2/apache.conf
    文件
  • a2enmod重写
  • a2ensite mysite.conf
  • a2enmod信息
  • 使用
    http://localhost/server-info
    已确认加载正确的配置:

    Current Configuration: (from server-info page)
    In file: /etc/apache2/sites-enabled/mysite.conf
       1: <Directory "var/www/html/mysite/">
       7:   RewriteEngine On
       9:   RewriteCond %{REQUEST_FILENAME} !-d
      10:   RewriteCond %{REQUEST_FILENAME} !-f
      11:   RewriteRule ^aphpfile /var/www/html/mysite/source/aphpfile.php [L]
        : </Directory>
    
    日志:

  • /var/log/apache2/access.log
  • /var/log/apache2/error.log
    :未显示与此特定事件相关的错误 请求
  • 额外详细信息:

  • 使用
    podman
    (非docker)
  • podman exec-it bash
    访问/修改容器
  • 负责重新启动apache2服务,验证站点和mod是否已启用
  • edit2

    不是问题的解决方案,但我将继续使用替代方案:

    这样,所有功能以及重写规则都可以正常工作

    已创建新图像:

    #Dockerfile
    FROM debian:buster-slim
    RUN apt update -y \
     && apt install -y apache2 php php-<many extensions> \
     && apt clean all
    #COPY <source> <dest>
    #RUN <a2enmod, a2ensite>
    CMD apachectl -D FOREGROUND
    
    #Dockerfile
    来自debian:buster slim
    运行apt更新-y\
    &&apt安装-y apache2 php-\
    &&善始善终
    #抄袭
    #跑
    CMD apachectl-D前景
    

    仍然不知道为什么官方的
    php:7.x-apache
    图像不起作用。(Bug?

    “#可以肯定的是,我也尝试过使用^/aphpfile^/mysite/aphpfile^/mysite/aphpfile”你发现了什么<代码>^aphpfile与
    /mysite/aphpfile
    不匹配。我想先看看服务器信息输出中不起作用的示例,然后再假设您做得正确。当我进行假设时,我错过了可以保持分析准确的有效数据点:PAnother point,
    RewriteRule
    重写到一个URI位置,而不是底层文件系统上的路径。因此,如果您确实正确地编写了正则表达式,那么您可能会将url直接写入
    https://servername/var/www/html/mysite/source/aphpfile.php
    然后将尝试从docroot读取,类似于/var/www/html/var/www/html/mysite/source/aphpfile.php`,这实际上是一个404。@Daniel Farrell,谢谢你的评论,编辑了原始帖子,加入了我曾经尝试过的内容。请在帖子中搜索edit1术语。因为
    mysite.conf
    有,
    ,我正在搜索
    ^aphpfile
    ,它在非容器服务器中正常工作。另外,如果写入
    ,则搜索
    ^mysite/aphpfile
    在非容器服务器中工作,目标是文件的绝对路径(从/var/…)开始)。当服务器是容器时,这些都不起作用。
    127.0.0.1 - - [31/Oct/2020:14:01:36 +0000] "GET /mysite/aphpfile HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
    
    #Dockerfile
    FROM debian:buster-slim
    RUN apt update -y \
     && apt install -y apache2 php php-<many extensions> \
     && apt clean all
    #COPY <source> <dest>
    #RUN <a2enmod, a2ensite>
    CMD apachectl -D FOREGROUND