Docker和Apache - 重定向301和尾随斜杠

时间:2017-08-18 15:53:10

标签: apache docker dockerfile

我希望我能在这里找到帮助,因为我有些日子以后很少失去......

我试图将PHP应用程序放在Docker容器中。

所以我使用此图片:https://hub.docker.com/_/php/ (特别是 php:7-apache 标签)。这样我就可以在同一容器中使用PHP和Apache。

所以我的问题是,当我访问没有尾部斜杠的URL时,我错误的重定向添加了斜杠,但使用了Docker主机无法访问的容器IP地址。

示例:

  • http:// localhost / admin - >重定向问题
  • http:// localhost / admin / - >效果很好

正如您在此屏幕截图中所看到的,有一个自动重定向与容器的本地IP,但它无法访问:我们在Web浏览器中超时。

console screenshot

在这种情况下,容器IP地址为172.17.0.2

(我的容器在我的主机端口80上发布,所以我使用localhost访问它,就像标准的docker方式一样)

我的VirtualHost非常简单:

<VirtualHost *:*>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html


    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

你对这个问题有什么想法吗? 我想我记得301重定向是Apache的正常行为,因为mod_dir?但为什么它使用容器本地IP?

感谢您的帮助,对不起我的英语!

1 个答案:

答案 0 :(得分:0)

在您的虚拟主机中缺少

    let prendiContenitoreGalleria = document.querySelector('.contenitore-galleria'),
    prendiArticle = Array.prototype.slice.apply(document.querySelectorAll('.contenitore-galleria__article')),
    contaArticle = prendiArticle.length,
    prendiImmagini = Array.prototype.slice.apply(document.querySelectorAll('.contenitori__img')),
    prendiFrecciaSinistra = document.querySelector('.freccia-sinistra'),
    prendiFrecciaDestra = document.querySelector('.freccia-destra');
prendiContenitoreGalleria.style.width = 100 * contaArticle + '%';
for (let numeroImmagini = 0; numeroImmagini < prendiImmagini.length; numeroImmagini++) {
    prendiImmagini[numeroImmagini].style.width = 100 / contaArticle + '%';
}
prendiContenitoreGalleria.insertBefore(prendiArticle[contaArticle - 1], prendiArticle[0]);
prendiContenitoreGalleria.style.marginLeft = '-' + 100 + '%';
function andareADestra () {
    prendiContenitoreGalleria.style.marginLeft = '-' + 200 + '%';
    prendiContenitoreGalleria.style.transitionDuration = '.7s';
    prendiContenitoreGalleria.addEventListener('transitionend', function(e) {
        prendiContenitoreGalleria.appendChild(prendiArticle[0]);
        prendiContenitoreGalleria.style.marginLeft = '-' + 100 + '%';
    }, false);
}
function andareASinistra () {
    prendiContenitoreGalleria.style.marginLeft = 0;
    prendiContenitoreGalleria.style.transitionDuration = '.7s';
    prendiContenitoreGalleria.addEventListener('transitionend', function(e) {
        prendiContenitoreGalleria.insertBefore(prendiArticle[contaArticle - 1], prendiArticle[0]);
        prendiContenitoreGalleria.style.marginLeft = '-' + 100 + '%';
    }, false);
}
prendiFrecciaSinistra.addEventListener('click', function () {
    andareASinistra();
});
prendiFrecciaDestra.addEventListener('click', function () {
    andareADestra();
});

如果缺少它,Apache将尝试确定主机名本身并使用IP代替。由于它在docker容器下运行,因此IP将类似ServerName localhost ,无法通过浏览器访问。

这就是为什么需要添加172.17.0.2的原因,这样当apache必须发送重定向请求时,它可以创建该重定向的正确URL