12

如何将根目录或任何子目录中对 favicon.ico 的所有请求重定向到 /images/favicon.ico

4

5 回答 5

25

试试这个规则:

RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]

编辑    对于具有任意路径段深度的favicon.ico :

RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
于 2010-03-09T17:13:05.597 回答
8

对于最强大的方法的网站图标www.mysite.com/images/favicon.ico 将是:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico$ [NC]
RewriteCond %{HTTP_HOST} (.+)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301,L,NC]

解释:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]:
- 确保在请求正确的 URI 时重定向规则不适用(例如,301 重定向会将正确的网站图标 URI 写入浏览器缓存 - 如果浏览器请求正确的 URI,则此行避免处理规则)
- [NC]表示它不区分大小写

RewriteCond %{HTTP_HOST} (.+):
- 检索 http 主机名 - 避免将主机名硬编码到RewriteRule
- 这意味着您可以在本地/测试服务器和生产服务器之间复制您的 .htaccess 文件而不会出现问题(或者需要将您的新站点基础 url 重新硬编码到你的重写规则)

RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]:
-^是正则表达式的开头
-(.*)是一个通配符组 - 这意味着favicon在 URI 中的单词之前可以有零个或任意数量的字符(即,这是允许根目录或任何子目录包含在URI match)
-\.(ico|gif|png|jpe?g)检查 URI 扩展是否匹配任何.ico, .gif, .png, .jpg, .jpeg
-$是正则表达式的结尾
-http://%1/images/favicon.ico是重定向 url - 它会注入我们在之前检索到的主机名RewriteCond。请注意,这%1是一个称为RewriteCond 的反向引用,这意味着它是最后一个RewriteCond遇到的。(例如%2将是倒数第二个RewriteCond已经满足)
-R=301意味着它是一个永久重定向 - 它将重定向存储在浏览器缓存中。测试时要小心——您需要在代码更改之间删除浏览器缓存,否则重定向不会更新。在您知道规则有效之前,可能会忽略它。
-L表示它是此文件中要遵循的最后一个重定向.htaccess- 您不需要它来使规则正常工作,因为一旦浏览器被定向到正确的 url,将不会满足第 1 行。如果没有第 1 行或LRewriteRule 将导致永久循环(因为重定向 URL 将继续满足RewriteRule条件)。但是,添加L无论如何,如果您有其他遵循 favicon 规则的规则 - 因为在 favicon.ico 请求中,您可以(可能)忽略任何以下规则。

您可以在http://htaccess.mwl.be/测试.htaccess规则

最后说明: - 请注意,您的任何子目录
中的文件中都没有任何其他 RewriteRule 。 - 例如,如果您将此答案放在根文件夹文件中,则文件夹中的类型规则可能会混淆结果。.htaccess
www.mysite.com/.htaccessRewriteRule (.*) xxxwww.mysite.com/images/

于 2016-03-03T21:43:55.963 回答
3
RewriteEngine on

RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
于 2010-03-09T10:17:11.780 回答
0

这种快速重写应该可以解决问题:

RewriteRule ^(.*)favicon.ico /images/favicon.ico
于 2010-03-09T10:19:03.277 回答
0

我知道问题已被标记.htaccess,但为什么不使用符号链接?

ln -s images/favicon.ico favicon.ico
于 2010-03-12T09:09:32.950 回答