[Resolvido] RewriteRule [R=301] p/ redirecionamento com EReg no .
Olá a todos,
Estou tentando resolver um problema de Expressão Regular para implantar um redirecionamento através do .htaccess
A ideia é impedir o acesso direto a qualquer arquivo '.html', porem, ao mesmo tempo a ER deve liberar o acesso a determinados arquivos previamente autorizados.
Ex:
*.html = (proibe)
qualquer_coisa.html = (proibe)
red.html = (Permite)
blue.html = (Permite)
gray.html = (Permite)
Sendo assim, fiz essa condição que ao ler na URL uma determinada expressão faça um redirecionamento.
Condição para acesso direto a arquivos html
RewriteCond %{REQUEST_URI} \.html$ [NC]Regra de redirecionamento
RewriteRule ^([^r]|r[^e]|re[^d])([^/]*)\.html$ /proibido.html [R=301,L]Deste modo, o sistema ficaria perfeito, pois a EReg impede quando, e somente quando, a url começar com red.html
Independente, se outras urls começarem com algum caractere que presente na palavra 'red' ex: r....html, e....html ou d....html
O problema é que a partir dessa EReg eu não consigo que ela permita outras expressões, como: 'blue' ou gray conforme exemplo.
Ou seja, um arquivo eu consigo liberar mas os outros não.
Para funcionar a ER deve conter todas as expressões permitidas ou encontrar algum outro modo para fazer isso
Gambiarras, que eu quero evitar:
Se eu tirar o [NC] da condição e apenas aplicar na regra a ER ^([^/]*)\.html$ eu poderia muito bem colocar os arquivos "red.html" como "red.htmL"
ou com qualquer outra letra maiúscula em Html, HTML, HtMl... que o sistema não iria bloquear.
Para ajudar abaixo tem um link de um testador de ER em ajax (muito bom)
http://tools.lymas.com.br/regexp_br.php#
E um arquivo de como negar palavras especificas em ER por Aurélio Marinho Jargas e Editora Novatec, ©2001
http://guia-er.sourceforge.net/negar-palavra.html#5_3
Obrigado,
Obs:
pode-se impedir o acesso direto a arquivos com o script abaixo, porém não é o ideal, uma vez que deve-se colocar o script em todos os arquivos hospedados no site.
E é por esse motivo que estou tentando colocar isso no .htaccess
$url_absoluta = '( url do seu site)';
$url_phpself = $_SERVER['PHP_SELF'];
if (!ereg($url_absoluta, $url_phpself)) { header("Location: pagina_de_nao_encontrado.php"); }Discussão (3)
Carregando comentários...