.htaccess - перенаправить Favicon
Вопрос
Как перенаправить все запросы на favicon.ico в корневом каталоге или в любом подкаталоге на /images/favicon.ico
Решение
Попробуйте это правило:
RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
РедактироватьИ для favicon.ico С помощью произвольной глубины сегмента пути:
RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
Другие советы
Для любимого 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 (например, Redirect 301 напишет правильный URI Favicon в кэш браузера - и эта строка избегает обработки правила, если браузер запрашивает правильный URI)
- [NC] означает, что это не чувствителен к случаю
RewriteCond %{HTTP_HOST} (.+)
:
- Получает имя HTTP -хоста - чтобы избежать жесткого кодирования имени хоста в RewriteRule
- Это означает, что вы можете скопировать свой файл .htaccess между локальным/тестовым сервером и сервером производства без проблем (или необходимость повторного хардата вашего нового базового URL-адреса сайта в свой переписывающий орган)
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
Переписание приведет к постоянному петлю (поскольку URL -адрес перенаправления будет удовлетворить RewriteRule
условия). Тем не менее, это хорошая идея, чтобы добавить L
В любом случае, если у вас есть другие правила, следуя правилам Favicon - поскольку по запросу favicon.ico вы можете (вероятно) игнорировать любые следующие правила.
Вы можете проверить .htaccess
Правила в http://htaccess.mwl.be/
Заключительное примечание:
- Будьте осторожны, чтобы у вас не было другого переписания в .htaccess
Файл, расположенный в любой из ваших подзадачи.
- Например, если вы положите это Ответьте в вашем www.mysite.com/
Корневая папка .htaccess
Файл, а RewriteRule (.*) xxx
тип правила в вашем www.mysite.com/images/
Папка может связываться с результатами.
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
Я знаю, что вопрос помечен .htaccess
Но почему бы не использовать символическую ссылку?
ln -s images/favicon.ico favicon.ico
Этот быстрый перепись должен сделать свое дело:
RewriteRule ^(.*)favicon.ico /images/favicon.ico