Вместо этого перенаправьте ссылки на root на текущий псевдоним - PullRequest
0 голосов
/ 04 ноября 2011

Я использую локальную установку Apache 2.2.11 и настроил псевдоним для папки над корнем документа (alias localhost/fp/ => /www/dirs/friendpages).Я хотел бы иметь возможность перенаправлять запросы в "/favicon.ico" на localhost/fp/favicon.ico, а не на localhost/favicon.ico с файлом .htaccess в localhost/fp.Возможно ли это, и если да, то как бы я это сделал?

Ссылка на 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

... но все, что я получаю, при загрузке перечисленных выше localhost/fp/test.htm с помощьюВышеупомянутое RewriteRule заключается в следующем:

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 голосов
/ 04 ноября 2011

Ваш 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">
    

В любом случае, href будет указывать на /fp/favicon.ico, который преобразуется в /www/dirs/friendpages/favicon.ico.Если файл там, то вам больше не понадобится правило перезаписи.

Я согласен, что виртуальный хост - это излишнее решение этой проблемы.RewriteRule или правильный href должны быть все, что вам нужно, чтобы получить ваш favicon.

...