首页 > 解决方案 > 当日志显示已将请求重写为 php 文件时,Apache 仍会加载测试页面

问题描述

我已经配置了一个 apache 虚拟主机以将 localhost 指向 /var/www/html/mysite/public ,其中包含一个 htaccess 文件,该文件重写所有请求到同一目录中的 handle.php,我知道 htaccess 文件有效,因为其中的语法错误导致内部出现服务器错误

但是当我转到 localhost/ 时,我得到了 apache 测试页面,我LogLevel alert rewrite:trace3可以查看发生了什么,并且日志显示它正在尝试重写对 handle.php 的请求,但是......不是吗?这里发生了什么

handle.php 只包含die('test');所以我知道它是否真的使用了那个文件

[Mon Dec 03 09:23:09.248162 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca71a60/initial] [perdir /var/www/html/mysite/public/] strip per-dir prefix: /var/www/html/mysite/public/ ->
[Mon Dec 03 09:23:09.248270 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca71a60/initial] [perdir /var/www/html/mysite/public/] applying pattern '^(.*)/$' to uri ''
[Mon Dec 03 09:23:09.248298 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca71a60/initial] [perdir /var/www/html/mysite/public/] strip per-dir prefix: /var/www/html/mysite/public/ ->
[Mon Dec 03 09:23:09.248312 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca71a60/initial] [perdir /var/www/html/mysite/public/] applying pattern '^' to uri ''
[Mon Dec 03 09:23:09.248362 2018] [rewrite:trace1] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca71a60/initial] [perdir /var/www/html/mysite/public/] pass through /var/www/html/mysite/public/
[Mon Dec 03 09:23:09.248816 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] strip per-dir prefix: /var/www/html/mysite/public/index.php -> index.php
[Mon Dec 03 09:23:09.248840 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] applying pattern '^' to uri 'index.php'
[Mon Dec 03 09:23:09.248907 2018] [rewrite:trace2] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] rewrite 'index.php' -> 'handle.php'
[Mon Dec 03 09:23:09.248922 2018] [rewrite:trace3] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] add per-dir prefix: handle.php -> /var/www/html/mysite/public/handle.php
[Mon Dec 03 09:23:09.248936 2018] [rewrite:trace2] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] trying to replace prefix /var/www/html/mysite/public/ with /
[Mon Dec 03 09:23:09.248949 2018] [rewrite:trace1] [pid 183] mod_rewrite.c(482): [client snip:35984] snip - - [localhost/sid#55879ca14140][rid#55879ca77a90/subreq] [perdir /var/www/html/mysite/public/] internal redirect with /handle.php [INTERNAL REDIRECT]

标签: phpapache.htaccessmod-rewrite

解决方案


这是因为我的 apache 在 docker 容器中,并且 docker 阻止 apache 读取不存在的目录,strace 在调试时非常有用。见https://github.com/moby/moby/issues/1295


推荐阅读