.htaccess não pode redirecionar URL sem extensão

1

Estou tendo alguns URLs (vinculados de fora) que não têm uma extensão, por exemplo

www.example.com/main

Originalmente, havia arquivos main.htm e main.html na raiz do servidor.

No entanto, um

RewriteRule ^main$ main.html [L,R=301]

não funciona.

Não há pasta main/ nem um arquivo chamado main na raiz do servidor.

Existem outras entradas no arquivo .htaccess que funcionam, então tenho certeza que o RewriteMod está ativo e funcionando. Eu também tenho regras de reescrita para erros de digitação (um link para www.example.com/xyz) que pode ser redirecionado.

RewriteRule ^xyz\)$ xyz/index.html [L,R=301]

O interessante é que a URL www.example.com/main aparece inalterada no navegador (a URL na barra do navegador não muda (como acontece com um redirecionamento)), mas a página aparece com o conteúdo do arquivo main.de.html . Se eu criar um arquivo chamado main.da.html , ele aparecerá com esse conteúdo (mas somente após uma reinicialização do apache).

Não consigo descobrir como isso é feito ou como redirecioná-lo para main.html .

    
por Terminality 12.12.2016 / 12:07

1 resposta

2

Desative MutliViews na parte superior do seu arquivo .htaccess :

Options -MultiViews

Os MultiViews (parte do mod_negotiation) normalmente pesquisam os arquivos físicos que correspondem a main (neste caso) como um nome de base (e responderiam com um tipo mime apropriado). Isso acontece antes mod_rewrite. Portanto, se você tiver um arquivo chamado main.de.html , ele será exibido como uma subrequência interna (sem redirecionamento) antes que o mod_rewrite tenha sido processado.

(but only after an apache restart).

Isso não é algo que normalmente exigiria uma reinicialização do Apache. Embora seja possível que haja algum armazenamento em cache acontecendo. (?)

RewriteRule ^main$ main.html [L,R=301]

Além disso: é improvável que seja válido como um redirecionamento externo, a menos que você tenha uma diretiva RewriteBase existente (suponho que você deva ter) Caso contrário, você deve prefixar a substituição com uma barra. ie. /main.html (se o arquivo estiver na raiz do documento).

www.example.com/main URL appears unaltered in the browser

Se o MulitViews não for o problema, pode ser que a diretiva esteja no lugar errado no arquivo de configuração e outras diretivas talvez estejam em conflito. Precisamos ver seu arquivo .htaccess .

    
por 12.12.2016 / 13:01