如何修复apache2日志中的“找不到文件”错误

问题描述 投票:0回答:1

我正在用PHP构建一个MVC框架。我正在使用像这样的分段URL:

http://mydomain.com/controller/method/param1/param2

我在Apache .htaccess中使用以下重写规则:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z\-_]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&method=$2&param1=$3&param2=$4 [NC,L]

URL工作正常,并且正在调用正确的控制器和方法。但是,我在apache2 error.log中遇到了很多错误。无论何时我访问具有两个或更多段的URL,我都会收到“找不到文件”错误。浏览器中没有404。

只是为了澄清,以下URL不会导致Apache日志中的错误。

http://dev.bonesphp.com/about

但是,以下URL将导致错误:

http://dev.bonesphp.com/about/test/pre>

文件不存在:/var/www/vhosts/dev.bonesphp.com/about

我的php.ini错误设置设置为E_ALL / STRICT

有谁知道如何解决这一问题?

提前致谢!

更新:2013年5月12日

我在Apache中启用了重写日志。这是重写日志在我尝试访问上述URL时所说的内容:

127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] add path info postfix: /var/www/vhosts/dev.bonesphp.com/about -> /var/www/vhosts/dev.bonesphp.com/about/test 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/about/test -> about/test 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '^([a-zA-Z\-_]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$' to uri 'about/test' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (2) [perdir /var/www/vhosts/dev.bonesphp.com/] rewrite 'about/test' -> 'index.php?controller=about&method=test&param1=&param2=' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (3) split uri=index.php?controller=about&method=test&param1=&param2= -> uri=index.php, args=controller=about&method=test&param1=&param2= 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] add per-dir prefix: index.php -> /var/www/vhosts/dev.bonesphp.com/index.php 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (2) [perdir /var/www/vhosts/dev.bonesphp.com/] strip document_root prefix: /var/www/vhosts/dev.bonesphp.com/index.php -> /index.php 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747170a0/initial] (1) [perdir /var/www/vhosts/dev.bonesphp.com/] internal redirect with /index.php [INTERNAL REDIRECT] 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a3508/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/index.php -> index.php 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a3508/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '^([a-zA-Z\-_]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$' to uri 'index.php' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a3508/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/index.php -> index.php 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a3508/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '(^|/)\.' to uri 'index.php' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a3508/initial/redir#1] (1) [perdir /var/www/vhosts/dev.bonesphp.com/] pass through /var/www/vhosts/dev.bonesphp.com/index.php 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] add path info postfix: /var/www/vhosts/dev.bonesphp.com/about -> /var/www/vhosts/dev.bonesphp.com/about/favicon.ico 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/about/favicon.ico -> about/favicon.ico 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '^([a-zA-Z\-_]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$' to uri 'about/favicon.ico' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] add path info postfix: /var/www/vhosts/dev.bonesphp.com/about -> /var/www/vhosts/dev.bonesphp.com/about/favicon.ico 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/about/favicon.ico -> about/favicon.ico 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '(^|/)\.' to uri 'about/favicon.ico' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b747130a0/initial] (1) [perdir /var/www/vhosts/dev.bonesphp.com/] pass through /var/www/vhosts/dev.bonesphp.com/about 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a1290/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/404.html -> 404.html 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a1290/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '^([a-zA-Z\-_]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?$' to uri '404.html' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a1290/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] strip per-dir prefix: /var/www/vhosts/dev.bonesphp.com/404.html -> 404.html 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a1290/initial/redir#1] (3) [perdir /var/www/vhosts/dev.bonesphp.com/] applying pattern '(^|/)\.' to uri '404.html' 127.0.0.1 - - [12/May/2013:17:52:35 --0400] [dev.bonesphp.com/sid#7f0b748dc0a8][rid#7f0b6e4a1290/initial/redir#1] (1) [perdir /var/www/vhosts/dev.bonesphp.com/] pass through /var/www/vhosts/dev.bonesphp.com/404.html
apache mod-rewrite file-not-found
1个回答
0
投票

我终于解决了这个! “文件不存在”错误是由浏览器对favicon.ico的请求引起的!

当URL只有一个段,例如http://dev.bonesphp.com / about时,浏览器会从网站的根目录中请求favicon,这正是我的favicon所在的位置。但是,如果URL有两个段,例如http://dev.bonesphp.com / about / test,则浏览器从子目录请求它。在上述URL的情况下,它在http://dev.bonesphp.com/about中查找favicon。这导致404,因为没有名为'about'的目录('/ about'映射到名为About.php的控制器文件)。

在Google上搜索后,我发现了一个Apache重写规则,适用于从任何目录请求的favicons:

http://perishablepress.com/redirect-all-requests-for-a-nonexistent-file-to-the-actual-file/

什么是PIA!我很高兴这已经结束了!

© www.soinside.com 2019 - 2024. All rights reserved.