Bonjour,
Je souhaite arriver à faire des redirections avec htaccess mais je n'y arrive pas du tout. Pouvez vous m'aider à obtenir les 3 redirections suivantes ?
1 - Passer de http://www.NDD.org/article.php3?id_article=1234 à http://www.NDD.org/node/1234
2 - http://www.NDD.org/spip.php?article1234 -> http://www.NDD/node/1234
3 - 60gp.ovh.net/~NDD/spip.php?article1234 -> http://www.NDD.org/spip.php?article1234 ou vers http://www.NDD.org/node/1234
Je crois qu'il n'y a rien de plus compliqué que les redirections Apache alors si une âme charitable passe par là je lui en serai fort reconnaissant.
Merci
# url rewriting ?
Posté par David . Évalué à 3.
C'est pas plutôt de l'url rewriting ?
[^] # Re: url rewriting ?
Posté par dark_moule . Évalué à 1.
[^] # Re: url rewriting ?
Posté par NeoX . Évalué à 2.
Attention c'est compliqué, il faut bien suivre les etapes pour ne pas se tromper
1°) ouvrir ton navigateur
2°) taper l'adresse http://www.google.fr
3°) demander les mots url rewriting et valider
4°) aller lire le premier resultat, ou le 4e
http://www.webrankinfo.com/analyses/autres/url-rewriting-deb(...)
http://www.vulgarisation-informatique.com/url-rewriting.php
remarque : tu aurais gagné au moins 2h en allant sur google avant de poser ta question sur le forum
[^] # Re: url rewriting ?
Posté par dark_moule . Évalué à 1.
Dans le 2ème lien que tu cites ils indiquent :
Voici un exemple de syntaxe d'un fichier .htacess destiné à transformer l'url article-5.php en son url exacte article.php?id=5.
On peut aussi rediriger toutes les url de la forme article-X.php ou X est un nombre en faisant ceci :
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^article-([0-9]*)\.php$ /article.php?id=$1 [L]
mais lorsque je fait ce qui est indiqué il ne se passe rien. Pourtant l'url rewriting est bien pris en compte puisque avec des règles différentes l'adresse change.
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^id_article=([0-9]+)$ /node/$1 [L,R=302]
Est ce que vous pouvez m'aider un peu plus qu'en me donnant des liens ?
Merci
# URL rewriting
Posté par santos . Évalué à 3.
en supposant que tu tournes avec un serveur apache, sous linux, la première chose à faire, c'est de charger le module d'apache qui permet de faire de la réécriture d'url (url rewriting).
Pour charger un module dans apache : a2enmod, et le module s'appelle mod_rewrite.
Ensuite, comme tu as trouvé dans tes recherches, il faut utiliser un fichier .htaccess.
Commence par le créer à la racine de ton site.
Dans le fichier, ajoute ces trois directives :
AddDefaultCharset UTF-8
Options +FollowSymlinks
RewriteEngine on
Ensuite, il faut écrire des règles de réécriture.
Contrairement à ce qu'on pourrait croire avant de commencer, une règle ne sert pas à transformer machin=truc&bidule=chouette en machin/truc/bidule/chouette, mais l'opération inverse !
En effet, dans le code HTML de ton site, tu indiques des adresses de la deuxième forme, et ce sont les fameuses règles de réécriture qui vont les convertir en des adresses compréhensibles par PHP (donc de la première forme).
Au passage, il faut connaître les bases des expressions régulières pour comprendre la réécriture d'url (Google est ton ami)
Voici un exemple de règle :
RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=$1&action=$2&id=$3 [L]
Cette règle permet de transformer par exemple :
/articles/lire/14 en index.php?module=article&action=lire&id=14
L'option [L] indique à apache de ne pas examiner les règles suivantes si l'adresse à convertir correspond à la règle en question. Par exemple :
RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=$1&action=$2&id=$3 [L]
RewriteRule ^([a-z]+)/([a-z]+)$ /index.php?module=$1&action=$2 [L]
RewriteRule ^([a-z]+)$ /index.php?module=$1 [L]
Ces trois règles permettent de convertir respectivement les url suivantes :
/articles/lire/14 en index.php?module=articles&action=lire&id=14
/articles/lister en index.php?module=articles&action=lister
/articles en index.php?module=articles
La directive [L] empêche qu'une url compatible avec la première règle soit "cassée" par la deuxième ou la troisième règle.
[^] # Re: URL rewriting
Posté par santos . Évalué à 2.
http://apache.developpez.com/cours/urlrewriting/
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 2.
Contrairement à ce qu'on pourrait croire avant de commencer, une règle ne sert pas à transformer machin=truc&bidule=chouette en machin/truc/bidule/chouette, mais l'opération inverse !
Tu es sûr ? J'ai changé de CMS et des liens qui étaient sous la première forme ne sont plus accessibles c'est pourquoi j'aimerai qu'apache les reecrives quand il les reçoit plutôt que de me dire "page introuvable"
Autrement j'ai fait tout ce que tu indiques et cela fonctionne. Le problème est que je n'arrive pas à utiliser les expressions régulières pour les adapter à ma situation, d'où ma demande d'aide. Ce n'est pas quelque chose de facile ni de compréhensible contrairement à ce que certains ont l'air de penser.
Si j'avais réussi tout seul il y a bien longtemps que je l'aurai déjà fait et je ne vous aurez pas dérangés.
[^] # Re: URL rewriting
Posté par santos . Évalué à 2.
Je voulais juste insister sur ce que fait précisément le module d'url rewriting :
il reçoit une adresse du genre /articles/lire/14, et la transforme en adresse de la forme index.php&module=articles&action=lire&id=14, et non l'inverse.
Par exemple, quelque part dans le code HTML de ton site (ou d'un autre site), tu vas avoir un lien du genre :
<a href="/articles/lire/14">Lire l'article</a>
Lorsque le serveur apache va recevoir une requête de la forme /articles/lister, il ne sait pas l'interpréter telle quelle, il demande à mod_rewrite de l'interpréter. Celui-ci lui renvoie une url de la forme index.php&module=articles&action=lister.
Comme ça, ton script PHP est capable de l'interpréter, à l'aide de $_GET. Exemple :
<?php
$module = $_GET['module']; // "articles"
$action = $_GET['action']; // "lister"
include ("/".$module."/".$action.".php"); // "articles/lister.php"
?>
Attention, ce script ne sert qu'à illustrer mon propos, il ne faut pas l'utiliser tel quel, car il n'est pas du tout sécurisé (pas de vérification du contenu des variables, donc risque d'inclure n'importe quoi)
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 1.
nom du lien
Ce sont ceux là que je veux changer en http://www.NDD.org/node/1234
C'est donc le contraire.
J'arrive à faire quelque chose qui fonctionne pour le 1er cas avec
RewriteCond %{REQUEST_URI} ^/article.php3$
RewriteRule ^.*$ %{QUERY_STRING}
RewriteRule ^id_article=([0-9]+)$ /node/$1 [L,R=302]
puisque je passe de http://www.NDD/article.php3?id_article=1234 à http://www.NDD.org/node/1234?id_article=1234
Il y a juste le ?id_article derrière qui sert à rien mais cela fonctionne.
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 1.
http://www.NDD.org/article.php3?id_article=1234
[^] # Re: URL rewriting
Posté par santos . Évalué à 2.
en fait en temps normal, l'url-rewriting sert à faire l'inverse...
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 1.
Je me contenterai bien des quelques lignes que j'ai fait puisque cela fonctionne mais est ce que cela ne va pas poser des problèmes de référencement au niveau de google ?
Et je n'arrive pas à virer le point d'interrogation et tout ce qui suit.
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 2.
Pour supprimer les paramètres en fin d'adresse il faut ajouter un point d'interrogation (?) à la fin de l'url vers laquelle on souhaite arriver.
[^] # Re: URL rewriting
Posté par BAud (site web personnel) . Évalué à 2.
http://faq.tuxfamily.org/WebArea/Fr#Remarques_diverses ?
parce que bon la question revient souvent :D
déjà que j'avais galéré pour l'install' de mediawiki
http://faq.tuxfamily.org/InstallMediawiki/Fr#Contenu_du_.hta(...)
ça en aidera d'autres àmha ;-)
[^] # Re: URL rewriting
Posté par dark_moule . Évalué à 2.
Meuh non, pas de soucis benoît, je te ferai ça dans la semaine.
[^] # Re: URL rewriting
Posté par santos . Évalué à 2.
RewriteRule ^node/([0-9]+)$ /article.php3?id_article=$1 [L]
Quelques explications :
- ne pas oublier ^ et $ en début et fin d'expression à gauche ;
- le $1 de droite correspond à l'expression régulière entre parenthèses à gauche. Si Il y a plusieurs blocs de parenthèses à gauche, ils prendront les noms $1, $2,... à droite ;
- attention, pas de / en début d'expression à gauche, mais il y faut en mettre un en début d'expression à droite.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.