Pergunta

Eu estou tentando redirecionar páginas de vários domínios antigos em um novo domínio em uma base página a página, isto é:

Página 1: http://www.example.org/default.asp? id = 1 redirecionamentos para http://www.example2.org/newpage.html Página 2: http://www.example2.org/default.asp?id=2 redirecionamentos para http://www.example.org/contact.html

... e assim por diante. Cada página de idade irá redirecionar para uma nova página específica.

Eu tentei escrever algo no .htaccess ao longo das linhas

Redirect 301 http://www.example.org/default.asp?id=1 h-tp://www.example.org/newpage.html
Redirect 301 http://www.example2.org/default.asp?id=2 h-tp://www.example.org/contact.html

Mas sem sorte até agora. mod_alias está habilitado ...

Eu também tentei usar RewriteCond e RewriteRule assim:

RewriteCond %{HTTP_HOST} example.org
RewriteRule default.asp?id=1 http://www.example.org/newpage.html [NC,L,R=301]
...

Em outras palavras:. Eu quero fazer um redirecionamento de página por página de ID baseado-to apelido baseada juntamente com uma fusão de três sites / domínios em um site

Espero que haja uma solução útil. Agradecemos antecipadamente!

Foi útil?

Solução

O Redirect directiva só faz o trabalho com o < a href = "http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Syntax" rel = "nofollow noreferrer"> caminho URL mas não o host ou consulta da URL .

Mas é possível com mod_rewrite :

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} =id=1
RewriteRule ^default\.asp$ http://www.example.org/newpage.html [NC,L,R=301]

E como já foi dito nos comentários, você pode usar um reescrita Roteiro para o mapeamento ID-to-Alias:

1 foo-page
2 bar-page
3 baz-page
…

A declaração RewriteMap (aqui um arquivo de texto simples):

RewriteMap id-to-alias txt:/absolute/file/system/path/to/id-to-alias.txt

E, finalmente, o aplicativo:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3}&%1%4 ^([^&]+)&(.*)
RewriteRule ^default\.asp$ http://www.example.org/%1.html?%2 [NC,L,R=301]

Isso também deve preserver a consulta restante. Se você não quer que:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3} .+
RewriteRule ^default\.asp$ http://www.example.org/%0.html? [NC,L,R=301]

Outras dicas

Uma boa alternativa para mod_rewrite é usar qualquer linguagem que você está mais confortável com e colocar a lógica em seu script. Aponte todas as URLs que você gostaria de redirecionar para o seu controlador de frente simples.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E, em seguida, em redirect.php:

<?php
if ($_SERVER['SCRIPT_URL'] == '/default.asp'){
    $map = array(
        1 => '/newpage.html',
        2 => '/contact.html'
    );
    if (isset($_GET['id'])){
        $id = $_GET['id'];
        if (isset($map[$id])){
            header('HTTP/1.1 301 Moved Permanently', true, 301);
            header('Location: http://'.$_SERVER['HTTP_HOST'].$map[$id]);
            exit;
        }
    }
}
// ... handle another/path/to_some_file.ext here, or other domains, or whatever ...

// If we get here, it's an invalid URL
header('HTTP/1.1 404 Not Found', true, 404);
echo '<h1>HTTP/1.1 404 Not Found</h1>';
echo '<p>The page you requested could not be found.</p>';
exit;
?>

Basta adicionar mais algumas informações

directivas redirecionamento do OP são, provavelmente, no formato errado - do doc apache relevante página :

A directiva Redirect mapeia um URL velho em um novo pedindo ao cliente para refetch o recurso à nova localização.

O URL-path de idade é um case-sensitive (% -Decoded) caminho começando com uma barra . Um caminho relativo não é permitido. O novo URL deve ser um absoluta URL começa com um esquema e hostname. Exemplo:

Redirect /service http://foo2.bar.com/service

Assim que tornaria:

Redirect 301 /default.asp?id=1 http://www.example.org/newpage.html

Espero que ajude

Em httpd.conf:

RedirectPermananent URL1 URL2

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