.htaccess - перенаправить значок - PullRequest
10 голосов
/ 09 марта 2010

Как перенаправить все запросы на favicon.ico в корневой каталог или любой подкаталог в /images/favicon.ico

Ответы [ 5 ]

22 голосов
/ 09 марта 2010

Попробуйте это правило:

RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]

Редактировать И для favicon.ico с произвольной глубиной сегмента пути:

RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
4 голосов
/ 04 марта 2016

Для иконки в 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]

Объяснение:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]:
- гарантирует, что правило перенаправления НЕ применяется, если запрашивается правильный URI (например, перенаправление 301 записывает правильный URI favicon в кэш браузера - и эта строка избегает обработки правила, если браузер запрашивает правильный 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]:
- ^ - начало регулярного выражения
- (.*) - группа подстановочных знаков - это означает, что перед словом favicon в 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 - вам не понадобится это, чтобы заставить правило работать, так как строка 1 не будет соблюдена, когда браузер будет направлен на правильный URL-адрес. Без строки 1 или L RewriteRule приведет к созданию постоянного цикла (поскольку URL перенаправления будет продолжать удовлетворять условиям RewriteRule). Тем не менее, было бы неплохо добавить L в любом случае, если у вас есть другие правила, следующие правилам favicon - поскольку при запросе favicon.ico вы можете (вероятно) игнорировать любые следующие правила.

Вы можете проверить .htaccess правила на http://htaccess.mwl.be/

Заключительное примечание:
- будьте осторожны, чтобы у вас не было никакого другого RewriteRule в файле .htaccess, расположенном в любом из ваших подкаталогов.
- Например, если вы поместите этот ответ в свой www.mysite.com/ корневой каталог .htaccess файл, правило типа RewriteRule (.*) xxx в вашей папке www.mysite.com/images/ может испортить результаты.

3 голосов
/ 09 марта 2010
RewriteEngine on

RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
0 голосов
/ 12 марта 2010

Я знаю, что вопрос помечен .htaccess, но почему бы не использовать символическую ссылку?

ln -s images/favicon.ico favicon.ico
0 голосов
/ 09 марта 2010

Это быстрое переписывание должно помочь:

RewriteRule ^(.*)favicon.ico /images/favicon.ico
...