Apache 将对根的引用重定向到当前别名

Apache 将对根的引用重定向到当前别名,apache,.htaccess,mod-rewrite,mod-alias,Apache,.htaccess,Mod Rewrite,Mod Alias,我正在使用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/frien

我正在使用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 Pattern Substitution
)。我特别困惑的是如何设置重写规则来区分相对文件引用(如通过上面的link标记的引用)和绝对文件引用(如“localhost/fp/favicon.ico”)(后者显然不需要重定向)

我还在我的
httpd.conf
文件中启用了重写日志记录:

RewriteLogLevel 9
RewriteLog /logs/rewrite.log
…但是,当使用上述重写规则加载上面列出的
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也可以实现这一点。。。怎么做?

我觉得你的重写规则很好,我不知道为什么它不起作用。(您确实打开了
重写引擎
?)

由于/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。如果文件在那里,那么就不再需要重写规则了


    我同意虚拟主机在解决这个问题上有点过头了。你只需要一个重写规则或正确的href就可以得到你的favicon。

    你的意思是说
    /www/dirs/fp
    /www/dirs/friendpages
    是同一个目录,还是它们真的不同了?@AndrewSchulman很好的发现——没有/www/dirs/fp,我调整了上面的描述以反映这一点。另外,我还纠正了第二个错误:链接标签引用了/favicon.ico,而不是favicon.ico。感谢您的回复!这些看起来像是很好的解决方案,唉,我在test.htm的link标记中犯了一个重大错误(刚刚纠正了它),这改变了问题:link标记显式地引用了
    /favicon.ico
    ,它当前取消了对/www/favicon.ico的引用。因此,挑战在于将/favicon.ico重定向到/fp/favicon.ico。感谢您修改后的回复。调整引用不是一个选项(至少如果我可以避免的话,这是我希望通过mod_rewrite实现的)。浏览器缓存可能有故障。不过,我不明白的是,
    rewrite.log
    没有提到/favicon.ico。加载
    localhost/fp/favicon.ico
    显式加载相应的图标
    RewriteEngine
    已打开,
    rewrite.log
    中有限的输出证明了这一点——尽管这是一个有效点。
    <link href="/fp/favicon.ico" rel="shortcut icon" type="image/x-icon">