^ = Der Anfang der Zeichenkette
$ = Das Ende der Zeichenkette
Zu deutsch... Die URL muss mit "dateiname.html" aufhören. "dateiname.html/irgendwas" würde somit nicht zutreffen.
Wobei das "RewriteRule dateiname.html$ dateiname.php" nicht wirklich konsequent ist, wenn schon, dann:
RewriteRule ^dateiname\.html$ dateiname.php
Ohne das ^ würde auch iregndwas-dateiname.html zutreffen. Und der Punkt alleine (ohne Maskierung) steht für ein beliebiges Zeichen. Technisch gesehen wäre der String "dateinameyhtml" so nämlich auch zutreffend.
"^dateiname\.html$" sagt aus:
Muss mit "d" beginnen. Gefolgt sein von "ateiname", dann muss ein "." kommen, danach ein "htm" und das letzte Zeichen muss ein "l" sein.
"dateiname.html$" sagt aus:
Irgendwo im String muss "dateiname" vorkommen (muss nicht am Anfang sein), danach darf ein beliebiges Zeichen kommen (unmaskierter Punkt), danach "htm" und als letztes Zeichen muss es ein "l" sein.