浏览器自动请求favicon导致重新访问一次主程序
语言:PHP
问题描述:自己写了一套程序实现简单的伪静态,就是将所有请求重定向到index.php
,然后根据URI分发给不同的脚本处理。但运行起来发现,index.php
总是比预想的多执行了一遍。
开始,自己以为是程序哪个地方出了问题,所以从头到尾检查,结果并没发现不合理的地方。最后没办法了,通过浏览器的network
查看是不是访问时多发送了一次请求。
这一看就找到原因了:浏览器自动请求favicon.ico
文件,但网站根目录不存在此文件,所以会重定向给index.php
处理,于是主程序又背地里被执行了一遍。于是,我在伪静态里把类似的静态文件给排除掉了,无论找不找得到,都不会触发程序执行。
之前的伪静态
Apache:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
Nginx:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
}
修改后的伪静态
Apache:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^.*\.(ico|css|js|gif|png|jpg|jpeg|xml|swf)
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
Nginx:
location ~* \.(gif|jpg|jpeg|png|css|js|ico|swf)$ {
break;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
}
当然,还有更简单的办法,就是在根目录放一个favicon.ico
文件吧。