J'avais l'habitude d'afficher le contenu d'un catalogue via le module Views , en accédant à une base de données externe, afin que toutes les URL soient quelque chose comme/content? Name = [name].
Pour diverses raisons, j'ai choisi d'importer le contenu directement dans Drupal comme type de contenu unique. Alors maintenant, mes URL sont/content/[nom].
J'ai besoin d'implémenter une redirection 301 pour que les personnes qui accèdent à la première URL (en raison d'anciens signets, liens, etc.) soient redirigées vers la nouvelle URL.
Est-il possible de définir une règle pour le type de contenu pour y parvenir? Le champ [nom] est le même, donc je pense que cela devrait être assez simple à configurer.
J'ai fait quelques recherches et j'ai trouvé RewriteRule ^/?content/([^/d]+)/?$ content?name=$1 [L,QSA]
. J'ai essayé de mettre cela dans le fichier .htaccess après RewriteEngine on
, Et cela n'a pas fonctionné. Suis-je en train de suivre la convention .htaccess appropriée? J'ai également essayé RewriteRule ^(.*)/content?name=(.*)$ $1/content/$2 [R,L]
, mais cela n'a pas fonctionné.
Dans certaines situations, la configuration d'une redirection dans votre .htaccess
le fichier peut ne pas être une option, telle que:
Ce sont toutes des raisons d'utiliser une approche basée sur le module Rules , comme détaillé ci-dessous.
En utilisant le module Rules pour que cela fonctionne, vous devriez pouvoir utiliser l'événement " Drupal initialise ". Cela garantira que la règle sera déclenchée AVANT que le contenu réel ne soit affiché.
Le lien que vous souhaitez "intercepter" doit être formaté dans un certain type d'expression régulière, que vous utilisez ensuite comme règles "Condition". afin que vous ayez une règle qui correspond à "avant d'afficher le contenu réel de quelque chose qui correspond à un chemin spécifique ...". Une fois que cette partie a fonctionné, votre "action" Règles doit spécifier la redirection réelle à effectuer.
Remarque : dans ce cas, vous pouvez également utiliser "contains /content?name=
"(au lieu de l'expression régulière) pour que la correspondance de texte fonctionne.
Reportez-vous à la partie "option 1" de ma réponse à la question sur " Comment restreindre l'accès à un nœud via nœud/12 et autoriser l'accès via un chemin d'accès comme contenu/quelque chose? ", qui contient ceci règle au format d'exportation:
{ "rules_check_url" : {
"LABEL" : "Disallow node/* access",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "init" : [] },
"IF" : [
{ "text_matches" : {
"text" : [ "site:current-page:url" ],
"match" : "node\/\\d+$",
"operation" : "regex"
}
}
],
"DO" : [
{ "drupal_message" : {
"message" : "Sorry, URLs like [site:current-page:url] are not allowed around here ...",
"type" : "error"
}
},
{ "redirect" : { "url" : "no_access" } }
]
}
}
Voici quelques réglages suggérés de l'exemple ci-dessus, pour le faire fonctionner également pour votre cas:
node/*
par votre chemin (dans le "label" et l'expression régulière).Pour rendre la valeur de l'argument URL disponible en tant que nouvelle variable dans Rules, vous pouvez utiliser le module Rules URL Argument . Voici une citation à ce sujet (à partir de sa page de projet):
... fournit deux conditions de règles basées sur des arguments URL:
- vérifier si un argument URL est présent.
- comparer la valeur d'un argument URL.
Il fournit également une action qui rend la valeur d'un argument URL disponible en tant que nouvelle variable pour Rules.
Les actions et conditions Rules nouvellement fournies se trouvent dans les groupes de conditions et d'actions "Argument URL" de l'interface de configuration des règles.
Pour un exemple d'utilisation, reportez-vous à Commentaire # 3 dans le numéro # 168636 qui est à propos de " Passez un montant à l'URL, c'est-à-dire site/contenu/titre de nœud? montant = 10 ou/node-title? = montant: 10 ". En voici la partie pertinente:
- ajoutez une condition "Vérifier s'il existe un argument URL" à votre règle et définissez la valeur "ARGUMENT" sur "montant".
- ajoutez l'action "Fournir une valeur d'argument URL" à la règle et définissez la valeur "NOM ARGUMENT URL" sur "montant" et dans la section "Variables fournies" "ARGUMENT DE L'URL - Nom de variable" à par ex. "
amount_from_url
".Vous pourrez désormais utiliser la valeur du montant comme variable "
amount-from-url
"pour les autres actions de cette règle.
[~ # ~] ps [~ # ~] : Si vous n'êtes pas familier (assez/encore) avec Règles , consultez les 32 (!!!) super tutoriels vidéo gratuits Apprenez le cadre des règles .
Pour les redirections 301, vous voudrez peut-être regarder le module Global Redirect . Quelques détails supplémentaires (à partir de sa page de projet):
GlobalRedirect est un module simple qui…
- Vérifie l'URL actuelle pour un alias et y redirige 301 s'il n'est pas utilisé.
- Vérifie l'URL actuelle pour une barre oblique de fin, la supprime si elle est présente et répète la vérification 1 avec la nouvelle demande.
- Vérifie si l'URL actuelle est la même que celle de site_frontpage et redirige vers la page d'accueil en cas de correspondance.
- Vérifie si la fonctionnalité Nettoyer les URL est activée, puis vérifie que l'URL actuelle est accessible à l'aide de la méthode propre plutôt que de la méthode "impure".
- Vérifie l'accès à l'URL. Si l'utilisateur n'a pas accès au chemin, aucune redirection n'est effectuée. Cela permet d'éviter d'exposer les nœuds alias privés.
- Assurez-vous que le cas de l'URL à laquelle vous accédez est le même que celui défini par l'auteur/administrateur. Par exemple, si vous définissez l'alias "articles/fabrication de gâteaux" sur node/123, l'utilisateur peut accéder à l'alias avec n'importe quelle combinaison de cas.
- La plupart des options ci-dessus sont configurables dans la page des paramètres. Dans Drupal 5, vous pouvez y accéder après avoir activé le module globalredirect_admin. Dans Drupal 6, la page des paramètres est intégrée au module.