前载mod_rewrite规则导致index.php加载两次

时间:2011-01-07 07:38:18

标签: apache mod-rewrite

我一直在研究一个使用前端程序处理所有请求的项目(路由domain.com/args/go/here到Index.php?req = args / go / here),它运行得很好。 ..或者我应该说,我认为它确实 - 我最近添加了一个新的记录器,并测试它我在index.php中放置了一个测试日志消息。每次重新加载页面时,此消息都被写入我的日志文件两次,经过大量调试后我发现原因是我的.htaccess文件 - 无论出于何种原因,它会为每个请求加载index.php两次。

这是我的.htaccess:

RewriteEngine On
RewriteBase /site/beta/ #I added this after I discovered the bug
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^index\.php$ #This too. Doesn't work
RewriteRule ^(.*)$ index.php?args=$1 [L]

我也试过了:

FallbackResource /site/beta/index.php

哪两个都不起作用(如果你尝试去,比如127.0.0.1/site/beta/admin/controls/,Index.php就不会加载 - 但如果你只是去/索引它就会这样做.php),仍然加载两次。

有人能帮助我吗?我花了几个小时在IRC,没有人能想出一个有效的解决方案。 (以上两个是唯一建议的)

2 个答案:

答案 0 :(得分:6)

你完全确定它是一个mod_rewrite错误吗?如果您使用高rewriteLogLevel(9)启用RewriteLog文件,您是否看到处理2次相同的请求?

对我来说,每当我看到“同样的请求完成2次”时,我会想到另一个奇怪的网络错误:空的IMG src错误

如果您的HTML中有某处

<IMG SRC="">

或其中一个css(更难找到)a:

url()

然后你就明白了。 HTTP协议规定空的GET url(以及css中的图像或url()是GET隐式请求)必须是对呈现原始页面的URL的相同URL的调用(如果它也可以是POST,则它也可以是POST你把你的页面作为POST请求)。

没有理由让mod_rewrite对一个请求做出2次响应。使用Firebug或LiveHTTP请求检查您是否总是发送index.php请求2次。或者手动测试服务器的telnet模式HTTP请求,因为这肯定只发送一个请求。

答案 1 :(得分:1)

这也可能是浏览器尝试加载(除非你检查apache访问日志,否则看起来似乎无形)favicon.ico。我有同样的问题,直到我把一个放在我的网站根目录中。我知道最初的提问者已经解决了这个问题,我把这个问题放在像我这样的人那里寻找同一个问题的答案。