我正在用PHP构建一个MVC框架。我使用分段网址,像这样:
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¶m1=$3¶m2=$4 [NC,L]
URL工作正常,正在调用正确的控制器和方法。然而,我在apache2中得到了很多错误error.log.任何时候我访问一个有两个或更多段的网址时,我都会得到一个“文件未找到”错误。浏览器中没有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
有人知道如何解决这个问题吗?
提前谢谢!
更新: 5/12/2013
我在Apache中启用了重写日志。当我尝试访问上面的URL时,重写日志是这样说的:
我终于解决了这个问题!“文件不存在”错误是由浏览器请求favicon引起的。伊科!
当URL只有一个段时,例如http://dev.bonesphp.com/about,浏览器会从网站的根目录请求favicon,而我的favicon正好位于该目录。但是,如果URL有两个段,例如http://dev.bonesphp.com/about/test,浏览器会从子目录请求它。在上述URL的情况下,它会在http://dev.bonesphp.com/about.这将导致404,因为没有名为“about”的目录(“/about”映射到名为about.php的控制器文件)。
在谷歌上搜索后,我发现了一条适用于从任何目录请求的favicons的Apache重写规则:
http://perishablepress.com/redirect-all-requests-for-a-nonexistent-file-to-the-actual-file/
真是个好主意!我很高兴这一切都结束了!