Как правильно .htaccess «RewriteRule ^ %1/favicon.ico [L]»?

Не пойму почему одно преобразование не работает.

Есть .htaccess текст ниже.
Из всего этого не работает только:
RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
	RewriteCond %{REQUEST_URI} ^/favicon.ico$
	RewriteRule ^ %1/favicon.ico [L]

Он как будто не видит содержимого %1, хотя аналогичные строчки ниже на "Public file" и "PHP script" работают так как задумано.

т.е. оно должно брать favicon.ico из соответствующей папки к примеру blog/favicon.ico. А оно всё время берёт из корня.

# Задает кодировку текста
    AddDefaultCharset utf-8
# Отключаем слэш на директории
	DirectorySlash Off
# Включаем работу механизмов преоброзования
    RewriteEngine On
    Options +SymLinksIfOwnerMatch
# Устанавливает базовый URL
	RewriteBase /

# Останов зацикливания RewriteRule
	RewriteCond %{ENV:REDIRECT_STATUS} .
	RewriteRule ^ - [L]

#-------- robot.txt --------#
	RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
	RewriteCond %{REQUEST_URI} ^/robot.txt$
	RewriteRule ^ robot.txt [L]
#-------- favicon.ico --------#
	RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
	RewriteCond %{REQUEST_URI} ^/favicon.ico$
	RewriteRule ^ %1/favicon.ico [L]
	#RewriteRule ^ project/favicon.ico [L]

#-------- Public file --------#
	RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
	RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f
	RewriteRule ^(resources/public.*)$ %1/$1 [L]

#-------- URL slash --------#
	RewriteCond %{REQUEST_URI} ^(.+)/$
	RewriteRule ^(.+)/$ https://%{SERVER_NAME}/$1 [R=301,L]
#-------- URL HTTPS --------#
	RewriteCond %{HTTP:SSL} !=1 [NC]
	RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [L,R=301]

#-------- PHP script --------#
	RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
	RewriteRule ^ %1/index.php [L]

#-------- THE END !!! --------#
	RewriteRule ^ - [R=404,L]
  • Вопрос задан
  • 310 просмотров
Решения вопроса 1
@dodo512
RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
RewriteCond %{REQUEST_URI} ^/favicon.ico$
RewriteRule ^ %1/favicon.ico [L]

Каждый раз при успешном совпадении регулярки в RewriteCond перезаписываются переменные %1-%9.
Совпадение с ^/favicon.ico$ затирает предыдущий результат в %1.
Условия нужно просто поменять местами.
RewriteCond %{REQUEST_URI} ^/favicon.ico$
RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
RewriteRule ^ %1/favicon.ico [L]


Или использовать обычное сравнение строк, а не регулярки.
RewriteCond %{SERVER_NAME} ^(www|blog|project|xerox)\.*
RewriteCond %{REQUEST_URI} =/favicon.ico
RewriteRule ^ %1/favicon.ico [L]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы