Pergunta

Eu estou transferindo um grande site estático de mais de 500 páginas para uma instalação Joomla, mas o que eu estou querendo fazer, ao invés de código de arquivo de uma linha 500+ .htaccess, é a utilização do PHP construído em 301 cabeçalho redirecionamento para solicitações dinamicamente redirecionamento que vêm para o novo URL.

Assim, por exemplo, depois de mover o site, a seguinte URL faria 404 sem um redirecionamento -

http://www.foo.com/old_page.html

Eu gostaria que redirecionar para

http://www.foo.com/old-page.php

Então, eu gostaria de criar um banco de dados MySQL de URLs antigos e seus correspondentes nova URL e, em seguida, se o servidor vai voltar a 404, por isso primeiro para verificar o DB para o URL antigo existente, e se combinado, para emitir um redirecionamento 301 para o novo URL. Certo, estou fazendo sentido aqui?

Como eu faria isso? I pode "falar" a lógica, mas realmente não sei por onde começar ou como realizá-lo porque, embora eu entendo PHP, eu realmente não entendo como isso funcionaria com Apache (ou mesmo se seria por exemplo ...) ?

E se você souber de quaisquer scripts lá fora, que já está fazendo isso, tanto melhor.

Foi útil?

Solução

Na sua configuração do Apache, definir um ErrorDocument de qualquer /404handler.php roteiro você gosta. Em seu contexto prazo, $ _ SERVER [ 'REQUEST_URI'] será o URI da página original solicitada. Faça a sua pesquisa de banco de dados, e se você encontrar uma página que você deseja redirecionar fazer, uso header ( "Location:". $ Onde). para redirecionar a ele

Outras dicas

A maneira mais simples que eu posso pensar seria usar mod_rewrite (link é para um ótimo tutorial introdução) para redirecionar todas as solicitações de entrada para um único script PHP (ou usar um sinalizador para que esse redirecionamento só acontece se o pedido é para um arquivo que não existe), com o endereço solicitado passado como parte da string de consulta. A partir daí, ter o olhar script PHP até onde esse pedido deve ir, e redirecionamento para ele.

Então, se alguém tenta abrir http://www.foo.com/old_page.html, o mod_rewrite iria enviar para algo como http://www.foo. com / redirect.php? page = old_page.html . redirect.php em seguida, faz uma pesquisa de banco de dados para ver o que o novo endereço para "old_page.html" é, e redirecionamentos para lá.

Em vez de criar um banco de dados, por que não basta colocar um redirecionamento para uma página com o velho URL (ie. Old_page.html)?

Uma vez que você está, obviamente, fazer isso em uma base caso a caso com as entradas do banco de dados, você pode simplesmente fazê-lo como uma base caso a caso com as páginas.

Você poderia escrever um script perl rápida ou o que você gostaria de gerar essas páginas html para lhe dado o nome de uma página antiga ea URL da nova página.

Você também pode usar um RewriteMap :

old_page new-page
# …

Mas você precisará definir esse mapa em você httpd.conf (ou configuração de host virutal):

RewriteMap oldtonew txt:/path/to/file/map.txt

Você pode então usar esse mapa em seu arquivo .htaccess:

RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top