Migration Drupal : 301 récupérer les URL via .htaccess

https://www.drupal.org/node/38960

Dans le .htaccess juste après :

<IfModule mod_rewrite.c>
  RewriteEngine on
  # Modify the RewriteBase if you are using Drupal in a subdirectory and
  # the rewrite rules are not working properly.
  #RewriteBase /drupal
  RewriteBase /

et avant le "Rewrite old-style URLs" , ajouter ses propres règles, selon la syntaxe suivante:

#custom redirects
RewriteRule ^old/URL/path$ http://example.com/new/path [R=301,L]
#end custom redirects

old est tout simplement le chemin de la racine de l'ancien site, et le nouveau chemin = chemin d'accès complet (domaine compris).
301 : redir permanente, le L assure qu'il n'y a pas de réécriture d'URL avant d'arriver à drupal. Cette commande doit etre située après "RewriteEngine on" (mod_rewrite apache).
Rappel regEx : ^ commence par  ; $ termine par ; ^$ est une chaine vide.

Un ex

Ancien site: des tas de pages en /foo/foo_detail.html et kk en /bar/index.html. Dans le nouveau site drupal, elles sont à /foo/foo_detail et /bar.

RewriteRule (.*)/index\.html$ http://www.mysite.nl/$1 [R=301,L]
RewriteRule (.*)\.html$ http://www.mysite.nl/$1 [R=301,L]

Puis on passe aux exceptions.

Pour les pages dont le chemin ne ressemble pas à l'ancien, les coder en dur et en 1er.
Par ex dans l'ancien un  /this_is_hot_news/index.html est maintenant en /news

Les fichiers .php sont gérés aussi. Un ex est montré ici.

# custom redirects
  #hard coded 
  RewriteRule ^this_is_hot_news/index\.html http://www.mysite/news [R=301,L]

  RewriteRule (.*)/index\.html$ http://www.mysite.nl/$1 [R=301,L]
  RewriteRule (.*)\.html$ http://www.mysite.nl/$1 [R=301,L]

  RewriteRule (.*)/index\.php$ http://www.mysite.nl/$1 [R=301,L]
  RewriteRule (.*)\.php$ http://www.mysite.nl/$1 [R=301,L]

  #end custom redirects

Les règles utilisées pour l'instant ne récupèrent pas l'argument après un ?
Pour les pages dynamiques, qui auront dans le nouveau site des chemin comme /photo?series=2 et /photo?series=3, etc. par ex:

RewriteCond %{THE_REQUEST} series=2
RewriteRule . http://www.mysite.nl/node/75? [R=301,L]
RewriteCond %{THE_REQUEST} series=3
RewriteRule . http://www.mysite.nl/node/72? [R=301,L]

Le ? qui est après l'ID du node sert à effacer la requete de l'url.

un terme a été renommé

RewriteRule ^oldTaxonomyTermURL/(.*)$ http://mysite.com/newTaxonomyTermURL/$1 [R=301,L]

 

Aller plus loin

Si le site est accessible avec et sans www. utiliser l'un de ces paramètres pour rediriger vers l'URL favorite (avec ou sans www):

# avec, ie pour http://example.com/... vers http://www.example.com/...
#RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
#RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
# sans, ie http://www.example.com/... vers http://example.com/
#RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
#RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Cas sous rep (http://example.com/drupal) ou du Virtual host et si les règles de réécriture d'url ne fonctionne pas bien:

# si http://example.com/drupal alors décommenter et modifier la ligne suivante:
# RewriteBase /drupal

 

 

Modules de redirection

Module path_redirect (dr 6) et redirect (dr7) Module Global redirect (v6, 7 et 8).

 


Source: https://www.acquia.com/fr/blog/migrating-drupal-way-part-ii-saving-those...

Migration par script, avec devel : https://www.acquia.com/fr/blog/migrating-drupal-way-part-i-creating-node

Voir aussi https://www.drupal.org/node/376157 (proche de la page acquia)

Et sur regex : https://regex101.com/  (source : http://korben.info/regex101-loutil-ultime-trouver-creer-tester-comprendr...)

logo drush