php - 当 mod_rewrite URL 以“.php”结尾时,使用 ProxyPass 的 Docker Apache 和 PHP 不起作用(错误:找不到文件)
问题描述
我也使用mod_rewrite成功地使用Apache和PHP容器配置了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 文件不存在?
解决方案
推荐阅读
- sql - 定期在 toad/pl sql 中发送 http 请求
- java - android如何以一定频率播放哔声
- java - Android获取模拟器的错误位置
- javascript - 什么时候应该使用 WebHID 而不是 WebUSB?
- pandas - Pandas 分类值计数的时间序列图
- javascript - 在 HTML 中循环使用 JavaScript 选择“选项”标签不给出结果
- php - 对于 zip 文件:此文件通常不被下载。在火狐中
- replace - 使用 Word 查找和替换复制上面的行
- javascript - 使用 Dropzone 和参数发布附加数据
- django - 如何在 django 中使用 Sqlite 创建触发器