Для иконки в 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/
может испортить результаты.