Eu tenho isso no meu htaccess, mas não consigo descobrir para que serve. Devido à natureza da regra, a pesquisa também não ajuda.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Alguém por favor pode explicar para que serve?
linux
apache-2.2
apache-2.4
.htaccess
mod-rewrite
Richard1984
fonte
fonte
/
ae não contiver ".
", redirecione a solicitação anexando-a com a/
. A intenção provável desta regra é manipular a indexação automática de diretórios.Respostas:
Tudo o que essa regra faz é adicionar um final
/
aos seus URLS, se não houver nenhum e se não houver.
no URI,https://example.org/test
será redirecionado parahttps://example.org/test/
, mashttps://example.org/test.html
não será reescrito parahttps://example.org/test.html/
(mas note:https://example.org/test.case/folder
também não será redirecionado parahttps://example.org/test.case/folder/
, pois contém a.
no URI).fonte
/test.case/folder
também não será redirecionado" - Ponto secundário, mas se "pasta" for um diretório do sistema de arquivos, o mod_dir emitirá (por padrão) um redirecionamento 301 para acrescentar uma barra final. É apenas um problema, se é/test.case/some-other-virtual-url
que deve ter uma barra final.Sem validar, mas usando minha experiência em reescrita do Apache, essa configuração parece:
Isso resultará nos seguintes casos de teste
/ -> / /test -> /test/ /my/resource -> /my/resource/ /my/resource.type -> /my/resource.type /edge.case/resource -> /edge.case/resource
Então, acho que a regra tem o objetivo de adicionar barras a recursos que não parecem ser um arquivo, mas parecem ter um caso de vantagem.
Se não estiver adicionando uma barra a um recurso com '.' (ponto) na parte que não é do arquivo, a expressão regular deve ser alterada para:
fonte
!(\/$|\.[^\/]*)
- O seu regex atualizado não é realmente diferente. Você precisa de uma âncora de fim de cadeia na segunda parte (que corresponda à extensão) também. Talvez algo como:!(/|\.[a-zA-Z]+)$
(não há necessidade de escapar das barras).