.htaccess - 重定向favicon

Tim*_*Tim 11 apache favicon .htaccess

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

Gum*_*mbo 23

试试这条规则:

RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
Run Code Online (Sandbox Code Playgroud)

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

RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
Run Code Online (Sandbox Code Playgroud)


gor*_*rds 5

对于收藏夹而言,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]
Run Code Online (Sandbox Code Playgroud)

说明:

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

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

RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]
- ^是正则表达式的开始
- (.*)是通配符组-表示faviconURI中的单词之前可以有零个或任意数量的字符(即,这是允许根目录或任何子目录包含在URI中的部分) URI匹配)
- \.(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请求,您可以(可能)忽略以下任何规则。

您可以.htaccesshttp://htaccess.mwl.be/上测试规则

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