Question

J'essaie de rediriger page par page les pages de plusieurs anciens domaines sur un nouveau domaine, à savoir:

page 1: http://www.example.org/default.asp? id = 1 redirige vers http://www.example2.org/newpage.html page 2: http://www.example2.org/default.asp?id=2 redirige vers http://www.example.org/contact.html

... et ainsi de suite. Chaque ancienne page sera redirigée vers une nouvelle page spécifique.

J'ai essayé d'écrire quelque chose dans .htaccess dans le sens de

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

Mais pas de chance jusqu'à présent. mod_alias est activé ...

J'ai aussi essayé d'utiliser RewriteCond et RewriteRule comme ceci:

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

En d'autres termes: je souhaite effectuer une redirection, page par page, d'un id à un alias, avec la fusion de trois sites / domaines en un seul site.

J'espère qu'il existe une solution utile. Merci d'avance!

Était-ce utile?

La solution

Le Redirection directive ne fonctionne qu'avec le chemin d'URL mais pas l'hôte ou la requête de l'URL.

Mais c'est possible avec 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]

Et, comme déjà mentionné dans les commentaires, vous pouvez utiliser un rewrite map pour le mappage ID à alias:

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

La déclaration RewriteMap (ici un fichier texte simple):

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

Et enfin l'application:

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]

Cela devrait également préserver la requête restante. Si vous ne le souhaitez pas:

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]

Autres conseils

Une bonne alternative à mod_rewrite est d'utiliser la langue avec laquelle vous êtes le plus à l'aise et de mettre la logique dans votre script. Pointez toutes les URL que vous souhaitez rediriger vers votre contrôleur frontal simple.

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

Et ensuite, dans le fichier redirect.php:

<?php
if (

Une bonne alternative à mod_rewrite est d'utiliser la langue avec laquelle vous êtes le plus à l'aise et de mettre la logique dans votre script. Pointez toutes les URL que vous souhaitez rediriger vers votre contrôleur frontal simple.

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

Et ensuite, dans le fichier redirect.php:

<*>SERVER['SCRIPT_URL'] == '/default.asp'){ $map = array( 1 => '/newpage.html', 2 => '/contact.html' ); if (isset(

Une bonne alternative à mod_rewrite est d'utiliser la langue avec laquelle vous êtes le plus à l'aise et de mettre la logique dans votre script. Pointez toutes les URL que vous souhaitez rediriger vers votre contrôleur frontal simple.

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

Et ensuite, dans le fichier redirect.php:

<*>GET['id'])){ $id =

Une bonne alternative à mod_rewrite est d'utiliser la langue avec laquelle vous êtes le plus à l'aise et de mettre la logique dans votre script. Pointez toutes les URL que vous souhaitez rediriger vers votre contrôleur frontal simple.

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

Et ensuite, dans le fichier redirect.php:

<*>GET['id']; if (isset($map[$id])){ header('HTTP/1.1 301 Moved Permanently', true, 301); header('Location: http://'.

Une bonne alternative à mod_rewrite est d'utiliser la langue avec laquelle vous êtes le plus à l'aise et de mettre la logique dans votre script. Pointez toutes les URL que vous souhaitez rediriger vers votre contrôleur frontal simple.

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

Et ensuite, dans le fichier redirect.php:

<*>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; ?>

Il suffit d'ajouter quelques informations supplémentaires

Les directives de redirection de l'OP sont probablement dans le mauvais format - d'après le document apache approprié page :

  

La directive Redirect mappe une ancienne URL   dans un nouveau en demandant au client de   récupérer la ressource à la nouvelle   emplacement.

     

L'ancien chemin d'URL est sensible à la casse   (% -decoded) chemin commençant par un   slash . Un chemin relatif n'est pas   permis. La nouvelle URL doit être un   URL absolue commençant par un schéma   et nom d'hôte. Exemple:

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

Cela ferait donc:

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

L’espoir que cela aide

Dans httpd.conf:

RedirectPermananent URL1 URL2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top