Looks to me like the line
RewriteCond %{HTTP_REFERER} ^(.*)$
matches anything, making the rest of the conditions mute. What is that line there for?
Also, while what you are doing may be fine for your purposes, do be aware that it is not difficult to create a request with a fake referer [sic] header.
Also, if your goal is to allow those particular referers and bump the rest to "maintenance.html", then I think you want the matching conditions negated for the referers. But I may be misunderstanding your intent here.