我正在使用Apache 2.2.11的本地安装,并为文档根目录(alias localhost/fp/ => /www/dirs/friendpages
)上方的文件夹设置了别名。我希望能够将请求重定向到“/favicon.ico”到localhost/fp/favicon.ico
,而不是localhost/favicon.ico
,并在localhost/fp
中使用.htaccess文件。这是可能的,如果可以的话,我该怎么做?
对favicon.ico的引用将来自如下文件:
/www/dirs/friendpages/test.htm (localhost/fp/test.htm)
=>
<html>
<head>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon">
</head>
<body>
Page using favicon.ico
</body>
</html>
我使用RewriteRule进行了多次尝试。例如,
RewriteRule ^/favicon.ico$ /www/dirs/friendpages/favicon.ico
......但未能找到解决方案。看来我对 Pattern 究竟是什么以及 Substitution 应该是什么(给定RewriteRule Pattern Substitution
)感到困惑。我特别感到困惑的是如何设置一个RewriteRule来区分相对文件引用,例如通过上面的链接标记与一个绝对的引用,如“localhost / fp / favicon.ico”(后者显然不需要重定向) )。
我还在httpd.conf
文件中使用以下内容启用了重写日志记录:
RewriteLogLevel 9
RewriteLog /logs/rewrite.log
...但是所有我得到的,当用上面提到的RewriteRule加载上面列出的localhost/fp/test.htm
时是这样的:
127.0.0.1 - - [04/Nov/2011:05:09:51 --0700] [localhost/sid#14f44f8][rid#2619268/initial] (3) [perdir /www/dirs/friendpages/] strip per-dir prefix: /www/dirs/friendpages/test.htm -> test.htm
127.0.0.1 - - [04/Nov/2011:05:09:51 --0700] [localhost/sid#14f44f8][rid#2619268/initial] (3) [perdir /www/dirs/friendpages/] applying pattern '^/favicon.ico$' to uri 'test.htm'
127.0.0.1 - - [04/Nov/2011:05:09:51 --0700] [localhost/sid#14f44f8][rid#2619268/initial] (1) [perdir /www/dirs/friendpages/] pass through /www/dirs/friendpages/test.htm
我发现另一种方法(没有硬编码适当的引用本身)来实现所需的结果是设置一个虚拟主机(而不是简单地使用别名)但我的直觉是这也应该可以使用mod_rewrite和.htaccess ......怎么样?
答案 0 :(得分:0)
你的RewriteRule看起来很好,我不知道为什么它不起作用。 (你有RewriteEngine on
?)
由于/ fp已经别名为/ www / dirs / friendpages,您可能只需调整链接href:
将其更改为相对的:
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon">
这将隐含地引用/fp/favicon.ico。
将其更改为显式指向/fp/favicon.ico:
<link href="/fp/favicon.ico" rel="shortcut icon" type="image/x-icon">
无论哪种方式,href都将指向/fp/favicon.ico,它将解析为/www/dirs/friendpages/favicon.ico。如果文件在那里,那么你将不再需要重写规则。
我同意虚拟主机对此问题有点过分。只需要RewriteRule或正确的href来获取你的图标。