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

时间:2011-11-04 12:56:03

标签: 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/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 ......怎么样?

1 个答案:

答案 0 :(得分:0)

你的RewriteRule看起来很好,我不知道为什么它不起作用。 (你有RewriteEngine on?)

由于/ fp已经别名为/ www / dirs / friendpages,您可能只需调整链接href:

  1. 将其更改为相对的:

    <link href="favicon.ico" rel="shortcut icon" type="image/x-icon">
    

    这将隐含地引用/fp/favicon.ico。

  2. 将其更改为显式指向/fp/favicon.ico:

    <link href="/fp/favicon.ico" rel="shortcut icon" type="image/x-icon">
    
  3. 无论哪种方式,href都将指向/fp/favicon.ico,它将解析为/www/dirs/friendpages/favicon.ico。如果文件在那里,那么你将不再需要重写规则。

    我同意虚拟主机对此问题有点过分。只需要RewriteRule或正确的href来获取你的图标。