Frage

Ich versuche, Seiten aus mehreren alten Domains auf eine neue Domain auf einer Seite-zu-Seite-Basis umgeleitet werden, das heißt:

Seite 1: http://www.example.org/default.asp? id = 1 Umleitungen an http://www.example2.org/newpage.html Seite 2: http://www.example2.org/default.asp?id=2 Umleitungen an http://www.example.org/contact.html

... und so weiter. Jede alte Seite auf eine bestimmte neue Seite umgeleitet werden.

Ich habe versucht, etwas in .htaccess entlang der Linien von

schreiben
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

Aber kein Glück so weit. mod_alias aktiviert ist ...

Ich habe auch versucht RewriteCond und RewriteRule wie folgt aus:

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

Mit anderen Worten:. Ich mag aus umleiten einer Seite-an-Seite tun id-basierten Alias-basierte zusammen mit einer Zusammenführung von drei Standorten / Domänen in einer Website

Ich hoffe, dass es eine nützliche Lösung ist. Vielen Dank im Voraus!

War es hilfreich?

Lösung

Die Redirect Richtlinie nicht nur mit der Arbeit < a href = "http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Syntax" rel = "nofollow noreferrer"> URL-Pfad aber nicht der Host oder Abfrage der URL .

Aber es ist möglich, mit 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]

Und wie schon gesagt in den Kommentaren, können Sie eine Rewrite map für die ID-to-Alias-Zuordnung:

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

Die RewriteMap Erklärung (hier eine einfache Textdatei):

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

Und schließlich die Anwendung:

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]

sollte sicherstellen, dass auch Erhalter die verbleibende Abfrage. Wenn Sie nicht wollen, dass:

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]

Andere Tipps

Eine gute Alternative zu mod_rewrite ist zu verwenden, was Sprache, die Sie am bequemsten mit und die Logik in Ihrem Skript zu setzen. Punkt alle URLs, die Sie möchten Ihre einfachen Front-Controller umgeleitet werden.

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

Und dann, in 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;
?>

Nur ein paar mehr Infos Hinzufügen

Die Umleitung des OP-Richtlinien sind wahrscheinlich im falschen Format - aus dem entsprechenden Apache doc Seite :

  

Die Redirect Direktive bildet eine alte URL   in einen neuen von den Kunden zu fragen,   wieder beschaffen, die Ressource auf dem neuen   Lage.

     

Die alte URL-Pfad ist ein case-sensitive   (% -Decoded) Pfad mit einem Anfang   Schrägstrich . Ein relativer Pfad ist nicht   erlaubt. Die neue URL sollte eine sein   absolute URL mit einem Schema beginnen   und Hostnamen. Beispiel:

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

Damit würde es machen:

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

Ich hoffe, das hilft

In httpd.conf:

RedirectPermananent URL1 URL2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top