Am impresia ca nu poti folosi array in functii gen preg_match.
Atribuie unei valori arrayu si foloseste valoarea in preg_match.
Php-ul este cam buggie la partea cu referintele....mai ales in 5.3

Ti-as recomanda sa folosesti in loc de !preg_match("/siteulmeu\.ro/", $_SERVER[HTTP_REFERER],
if(strpos($val,'siteulmeu.ro')!=false )
{}
else
{header("Location: http://siteulmeu.ro");} , fiindca 0 negat devine boolean (testeaza asta echo var_dump(!0); ), 0 fiind returnat de preg_match cand nu exista acel pattern in string, 0 find de tip INT !!!!