我正在构建自己的 URL 缩短网站,并将其用作我的 .htaccess
文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /go.php [L]
</IfModule>
这应该将任何 URL(不是文件)重定向到 go.php
,以进行 URL 重定向。
问题是:
当我访问 example.com/keyword
时,我会看到 go.php
页面。然后,我使用以下方法提取关键字:
$url = $_SERVER['REQUEST_URI'];
$keyword = strtok($url, '?');
$keyword = ltrim($keyword,"/");
然后,我将当前关键字及其引荐来源网址 ($_SERVER['HTTP_REFERER]
) 插入到数据库中的 log
表中。
一切似乎都工作正常,但在我的日志表中,有两行新行,而不是一行:一行包含正确的关键字 example
,另一行包含关键字 favicon.ico
和 http://example.com/keyword
作为引荐来源网址。
这里到底发生了什么?我只需要第一行和正确的行。这个问题是否只发生在 favicon.ico
上?我该如何解决这个问题?
谢谢!
最佳答案
您的浏览器在请求之后请求 favicon.ico
文件。如果存在,它将使用它作为浏览器选项卡中的图标(例如那个整洁的小 stackoverflow 图标)。
由于您的服务器上不存在该请求,因此该请求将通过所有重写条件。简单地添加一个额外的条件来忽略(不转发到 go.php)favicon 请求。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/favicon.ico$
RewriteRule ^.*$ /go.php [L]
概念证明:http://htaccess.mwl.be?share=f2fa97da-14b9-5c2e-8c58-c2c620b35c76
额外提示,忽略所有 .ico
、.jpg
、.css
等(我最喜欢的重写规则):
RewriteRule !\.(js|ico|gif|jpg|png|css|txt)$ /go.php [L]
关于php - .htaccess url-rewrite 如果文件不存在 - 如何处理 favicon.ico?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267570/