Como o segundo argumento para as diretivas RewriteCond
e SetEnvIfNoCase
são expressões regulares (regex), não cordas comuns. O Regex usa uma sintaxe especial para definir padrões de pesquisa . Na sintaxe de regex, o ponto / período é um caractere (meta) especial que representa qualquer caractere (exceto as novas linhas por padrão). A fim de combinar um ponto literal (ou seja, desabilitar o seu significado especial) você precisa fazer um backslash para escapar do ponto (ou seja, colocar uma barra invertida antes do ponto).
Então, um regex como spamdomain\.com
corresponde à string literal spamdomain.com
em qualquer lugar na string que está sendo testada. (No primeiro exemplo, corresponde a spamdomain.com
em qualquer lugar na variável HTTP_REFERER
server.) Considerando que uma regex como spamdomain.com
(onde o ponto não é escapado) corresponderia a spamdomainAcom
, spamdomainBcom
, etc. Porque um ponto corresponde a qualquer caractere.
RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]
Estritamente isso está incorreto. O regex corresponde mais do que o pretendido. No entanto, na realidade, isso pode não ser um problema se um ponto literal for o único caractere que poderia aparecer nessa posição. (Mas neste caso, o ponto deve ser escapado.)
Referência: