Шаблон
^$
совпадает только для главной страницы.
Можно убрать
^
или
$
. Тогда шаблон будет совпадать для любой страницы, в том числе и для
/3.html
.
Так что в итоге будет бесконечный редирект /3.html -> /3.html.
В правило нужно добавить исключение для /3.html.
Это можно сделать разными способами.
RewriteCond %{THE_REQUEST} "!^\S+ /3\.html"
RewriteRule ^ /3.html [L,R=301]
RewriteCond %{REQUEST_URI} !^/3\.html$
RewriteRule ^ /3.html [L,R=301]
RewriteCond %{REQUEST_URI} !=/3.html
RewriteRule ^ /3.html [L,R=301]
RewriteRule !^3\.html$ /3.html [L,R=301]
https://habr.com/ru/companies/sprinthost/articles/...