Um Redirecionamento do Apache, Exceções Múltiplas

3

Vou tentar explicar a situação em que estou, por isso o problema é um pouco mais compreensível, em primeiro lugar, penso. Estou basicamente tentando redirecionar um site antigo para um novo usando:

RedirectMatch permanent ^/old-website/.*        /new-website/

Isso funciona para redirecionar todo o site antigo para o novo site. Eu descobri desde o cliente que uma pasta do site antigo ainda precisa estar acessível, então adicionei uma exceção:

RedirectMatch permanent ^/old-website/(?!foo).*        /new-website/

Isso também funciona bem, mas agora me disseram que há várias pastas que eles ainda precisam acessar. A razão pela qual essas pastas precisam ser acessadas é que elas foram impressas em documentos que circularam nos últimos anos, então mudá-las para um novo lugar significaria que qualquer um que visse um desses documentos impressos teria um link quebrado.

Posso adicionar várias exceções usando esta sintaxe:

RedirectMatch permanent ^/old-website/(?!foo)(?!bar/).*        /new-website/

No entanto, o que eu quero saber é que existe uma maneira melhor / mais simples de fazer isso. A outra coisa a ter em conta é que o / old-site é um alias de / ~ user-account .

Eu não tive que fazer redirecionamentos assim antes, então minha pergunta é: A adição de exceções a uma regra do RedirectMatch é segura e confiável? Devo procurar problemas?

    
por Bendihossan 11.05.2011 / 11:01

1 resposta

3

É aqui que entra mod_rewrite . Como qualquer um dirá, mod_rewrite é voodoo , mas é muito poderoso e é exatamente o que você precisa para essa situação.

O redirecionamento de base é sólido (e muito confiável)

RedirectMatch permanent ^/old-website/.*        /new-website/

Você também pode mover seus arquivos antigos para o novo website e especificar algumas diretivas de reescrita para garantir que as URLs antigas ainda funcionem:

RewriteRule ^/old-website/foo/(.*)    /new-website/new-foo/$1    [L,R=301]
RewriteRule ^/old-website/bar/(.*)    /new-website/new-bar/$1    [L,R=301]

Isso corresponderá a todas as solicitações de URLs antigas, as regravará para o novo local e preservará o restante do caminho: $1 é substituído pelo conteúdo de (.*) nesse caso. Portanto, contanto que você mantenha os nomes de arquivos e a estrutura do caminho no novo local, todos os seus links antigos continuarão funcionando.

Note que as instruções do mod_rewrite sempre acontecem antes redireciona. Tenha isso em mente ao criar seu conjunto de regras.

Para mais detalhes, eu vou encaminhá-lo para o esta excelente pergunta .

EDITAR:

Se você não tem acesso ao mod_rewrite, então você deve usar o seguinte:

RedirectMatch permanent ^/old-website/(?!(foo|bar)/).*        /new-website/

Embora, se você tiver mais pastas do que isso, a linha de correspondência será um pouco difícil.

    
por 11.05.2011 / 11:49