Estou tentando modificar meu .htaccess
arquivo em um diretório específico. Se um usuário da web tentar encontrar qualquer arquivo neste diretório que possa ter o mesmo nome das opções a seguir, quero que ele seja redirecionado de volta para a página inicial. Abaixo estão alguns exemplos de nomes de arquivos.
/cat_1234.pdf
/cat_blahbla.doc
/cat_$9989&428.jpg
/cat_-309bn-020n.webp
...como posso dizer RewriteCond
para procurar esses padrões? Aqui foi minha melhor tentativa, que pensei que funcionaria, mas não funciona...
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^cat_([0-9a-zA-Z_]+)\.(pdf|doc|jpg|webp) [NC]
RewriteRule . /index.php [R=302,L]
</IfModule>
o que estou perdendo?
Você não declarou o "diretório específico" no qual o
.htaccess
arquivo e os arquivos que você está protegendo estão localizados? (Embora isso não deva importar se retrabalharmos a regra.)A
REQUEST_URI
variável do servidor contém o caminho completo da URL (incluindo o prefixo da barra); portanto, normalmente seria necessário incluir o "diretório específico", não apenas o nome do arquivo (a menos que você ajuste o regex). Você tem uma âncora de início de string no regex (embora tenha omitido a âncora de final de string), portanto esta condição (RewriteCond
diretiva) nunca corresponderá.Seu regex também não corresponderia ao terceiro e quarto exemplos porque sua classe de caracteres regex (
[0-9a-zA-Z_]
) omite os caracteres especiais$
e&
que-
estão presentes nesses nomes de arquivos. Embora eu suponha que você não precise ser tão específico e capturarcat_<anything>.pdf
(por exemplo) seria bom.No entanto, você não precisa de uma condição separada aqui. É mais fácil e eficiente usar apenas o
RewriteRule
pattern , que corresponde ao diretório que contém o.htaccess
arquivo (e exclui o prefixo da barra), então você não precisa se preocupar com o restante do caminho da URL.Também duvido que você deva redirecionar para
/index.php
. Não deveria ser simplesmente/
(o diretório raiz) e permitir que o índice do diretório (ou seja,index.php
) fosse servido por mod_dir? Esse não é o seu URL canônico?Em vez disso, tente o seguinte, no
.htaccess
arquivo do diretório que você está protegendo.Essa regex talvez seja um pouco mais ampla do que precisa, mas isso também a torna mais simples. ou seja.
[^/]
corresponde a qualquer coisa que não seja um/
(separador de caminho).E não há necessidade do
<IfModule>
wrapper, a menos que esta regra seja totalmente opcional.No entanto, em vez de redirecionar para a página inicial (o que é confuso para os usuários e desnecessário para os bots), eu simplesmente bloquearia (com um 403 Proibido) tais solicitações. Por exemplo: