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
où 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...)