Pergunta

Este é um problema muito estranho, e eu só espero que eu possa explicar isso claramente.

Basicamente, fizemos uma grande atualização em um site do cliente de hoje, e precisava atualizar algumas regras de reescrita no htaccess para acomodar a nova estrutura, etc ...

Então, onde nós originalmente tinha coisas como:

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      media.php

Nós alterado para:

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      index.php?id=media

Mas quando visitamos http://www.example.com/media - ele estava exibindo a página de media de idade. Então, quando nós removemos o velho media.php da raiz do documento, temos 404s. Algo em algum lugar ainda está mapeando / mídia para media.php -. E ignorando a regra de reescrita

O estranho é - todas as outras regras de reescrita no arquivo estão funcionando bem - e há cerca de 20 ou assim lá

.

Nós temos monitorado cima e para baixo o vhost e outros arquivos de configuração, mas não consegue encontrar qualquer referência a meios de comunicação ou outros redirecionamentos quebrados (três no total) -. Por isso estamos perplexos

Foi útil?

Solução 2

Desativar a opção MultiViews no .htaccess local fixo a questão -. Parecia que este foi permitindo a negociação de conteúdo que estava sendo processado antes a reescrever as regras

Outras dicas

Eu suspeito fortemente que isso seria devido a AcceptPathInfo, que na minha opinião é uma mis-recurso Apache. Por padrão Eu acredito que é ligado onde PHP é o manipulador.

Tente adicionar ao seu .htaccess, ou, de preferência o seu httpd.conf (e reiniciar):

AcceptPathInfo Off

Veja: http://httpd.apache.org/docs /2.2/mod/core.html#acceptpathinfo

-

Alguns pontos secundários:

Você deve garantir que seus RewriteRules sempre terminam com [L] depois de ter encontrado um jogo - ele vai ajudar na depuração. Por exemplo:.

RewriteRule ^/media/?$      index.php?id=media [L]

Além disso, você pode reduzir o número de regras, combinando os similares; por exemplo:.

RewriteRule ^/(media|resources)/?$  index.php?id=$1 [L]

Pessoalmente acho que o uso de /? no final do seu primeiro semestre não é bom, porque significa que ambos os URLs trabalhar, sem redirecionamento, o que significa que você não tem uma definitiva, que é 'correta'. Pessoalmente, eu usaria:

RewriteRule ^/(media|resources)/$  index.php?id=$1 [L]
RewriteRule ^/(media|resources)$ /$1/ [L,R]

Em outras palavras, um recurso único deve ter um único canônica URL, (definitiva).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top