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

Jon*_*Jon 3 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]
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

FallbackResource /site/beta/index.php
Run Code Online (Sandbox Code Playgroud)

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

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

reg*_*ero 6

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

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

如果你的HTML中有某个地方

<IMG SRC="">
Run Code Online (Sandbox Code Playgroud)

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

url()
Run Code Online (Sandbox Code Playgroud)

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

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