【发布时间】:2011-10-19 17:18:06
【问题描述】:
这个让我有点困惑。
我正在使用 Zend Framework 运行 LAMP 服务器。我花了很多时间查看我的错误日志以尝试清理任何编程错误/错误。
我的大多数特定站点错误都已完成,但我查看了我的一般 Apache 错误日志:
/var/log/apache2/error.log
而且我看到很多“文件不存在”的错误,几乎是恒定的,如下所示(为简洁起见):
[date] [error] [client #:#:#:#] File does not exist: /var/www/sites/[website folder]/public/explore
[date] [error] [client #:#:#:#] File does not exist: /var/www/sites/[website folder]/public/where-to-buy
[date] [error] [client #:#:#:#] File does not exist: /var/www/sites/[website folder]/public/products
等等。这些文件夹不存在,因为假设所有请求都被重定向到 index.php 文件并由 Zend Framework 处理。实际的控制者和动作是存在的,因此任何人都可以:
http://www.example.com/explore
或
http://www.example.com/where-to-buy/
将通过 Zend Framework 获得正确的页面。
但我不明白为什么会出现所有这些错误?
如果认为这可能与将大多数请求(不包括样式表、文档、图像等)重定向到 index.php 脚本的 .htaccess 文件有关。这是我的样子:
RewriteEngine On
# make sure all requests go to 'www' sub-domain
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
# Zend Framework, redirect requests to index.php
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Apache 是否首先尝试通过实际目录解析请求,然后将请求传递给 index.php?导致错误请求的原因是什么?
我也不确定为什么这会被转储到默认错误日志中,而不是错误日志或特定站点中。换句话说,我有每个域的错误日志,例如“example.com_error.log”。这可能是该问题的另一个迹象。这可能是一个序列的事情,因为“error.log”对“默认”站点感到厌烦。
感谢您的任何见解! 模糊的
【问题讨论】:
-
这可能是 htaccess 的问题。您是否尝试过合并这两个主要条件?我的意思是所有请求都被重定向到 www 版本和将重定向到 index.php 的那个?
-
这将转到默认日志这一事实实际上是对问题的一个很好的提示,请检查相关的 access.log。也许在您的虚拟主机中未处理的 DNS 名称上发出的某些请求或由未使用 HTTP 1/1 的 Web 客户端(因此没有主机标头)
-
一个有趣的信息是日志中还有推荐链接,它们来自我的网站:www.example.com。
-
根据 regilero 的建议(为什么我没有考虑这样做,我不知道),我查看了相同 IP/时间戳的访问日志。他们似乎没有访问任何不寻常的东西。它似乎也发生在某一天(很多)。现在,我只需要密切关注它,看看它是否会继续发生。根据 Aurelio 的建议,我的 htaccess 重定向可能会发生一些事情。从那以后我再也没有看到这种情况发生。也许我在那一天做了一些奇怪的事情。
-
你修好了吗?这对我会有帮助:)
标签: php apache zend-framework apache2