首页 > 解决方案 > 当 mod_rewrite URL 以“.php”结尾时,使用 ProxyPass 的 Docker Apache 和 PHP 不起作用(错误:找不到文件)

问题描述

我也使用mod_rewrite成功地使用ApachePHP容器配置了docker-compose环境。当我重写的 URL 最后包含“.php”时,它可以工作,但边缘情况除外。然后Apache会显示一个错误。File not found.

在我的Apache 容器中,我在 config 中使用以下内容sites-available/000-default.conf

DocumentRoot /var/www

DirectoryIndex index.php index.html

<LocationMatch "^(.*\.php(/.*)?)$">
    ProxyPass fcgi://php:9000/var/www
</LocationMatch>

在我的 PHP 应用程序根文件夹中,我还在一个文件中使用了mod_rewrite 。.htaccess这会将不是物理文件或目录的每个路由重定向到我的index.php. 对于重定向,我使用以下代码:

<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=permanent,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|jar|js)$

RewriteRule !.(css|jpg|jpeg|png|gif|zip|rar|js|jar)$ /index.php [L]
</IfModule>

这对于动态 URL 非常有效,除非我使用的动态 URL 最后包含“.php”。结果Apache错误:

File not found. 

如何配置 Apache 以使用以重写 URL 结尾的.php,但前提是物理 PHP 文件不存在?

标签: phpdockerapachemod-rewritedocker-compose

解决方案


推荐阅读