Url rewriting htaccess

WRInaute occasionnel
Code:
Options +FollowSymlinks
RewriteEngine on

RewriteRule   ^[a-zA-Z0-9\-_\+]+-4\.html$   mapage.php?id=4  [L]

## ou de manière plus générique
RewriteRule   ^[a-zA-Z0-9\-_\+]+-([0-9]+)\.html$   mapage.php?id=$2  [L]

A toi de choisir entre les deux règles de réécriture, sinon, un conseil, lis cet article avant de faire du rewriting :
https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting
puis :
https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting

Voilà, avec tout ça, tu devrais pouvoir t'en sortir :wink:
 
WRInaute discret
Merci,

j'ai lu les articles c'est plus clair, seul petit hic, comment je fais pour ne récupéré que le titre .
Moi j'ai des erreurs 404 quand je me sers de ton htaccess ...

Bref je me suis lancé un truc trop dur à réalisé je crois
 
WRInaute occasionnel
Allez, te décourages pas, envoie l'URL du site à bidouiller, si tu veux le garder à la discrétion de tous, envoies le moi par MP,
je vais faire ma BA de la journée :wink:
En s'y plongeant à deux, on devrait y voir plus clair.

Ce qu'il me faut : c'est le code entier de ton HTACCESS, l'URL de ton site et les pages que tu veux réécrire.

A tout à l'heure
 
WRInaute occasionnel
Alors,

Pour faire simple, ta page doit afficher le lien de cette manière :

Code:
<a href="http://www.nom-de-domaine.com/titre-de-la-page-sans-caractere-speciaux-04.html"> page titre de la page 04</a>

Pour ce, faire, dans ton code :
Tu dois créer une fonction qui va nettoyer le titre pour le rendre compatible avec l'écriture d'URL, je t'aides, voici ma fonction qui fais ça :
Code:
function nettoie_url($in) {
	$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.-]@');
	$replace = array ('e','a','i','u','o','c','-','-');
	return preg_replace($search, $replace, $in);
}

Ensuite, tu dois récupérer l'ID de ta page, dans le code ci-dessous, je l'ai appelé "$id_page" :

Code:
<?PHP 
 echo "<a href=\"http://www.nom-de-domaine.com/".nettoie_url($title)."-".$id_page.".html\"> ".$title."</a>";
?>

Du coup, pour une page dont le titre est admettons "ville au nom accentué ôèà" est l'id de la page est "4" :

cela te donnera le code HTML suivant :
Code:
<a href="http://www.nom-de-domaine.com/ville-au-nom-accentueoea-4.html">ville au nom accentué ôèà</a>

Niveau HTACCESS :
Code:
Options +FollowSymlinks
RewriteEngine on

RewriteRule   ^[a-zA-Z0-9\-_\+]+-([0-9]+)\.html$   ma_vraie_page.php?id=$2  [L]

Explication du code HTACCESS:

si j'appelle une URL qui a pour format : [tout caractère alpha-numérique]-[un numéro].html
J'affiche dans la barre d'adresse : [tout caractère alpha-numérique]-[un numéro].html
et j'interprète le code de la page ma_vraie_page.php?id=[un numéro]

vue technique vulgarisée du HTACCESS:
$2 de "videos.php?id=$2" est la deuxième variable qui m'a été passée par l'appel de [a-zA-Z0-9\-_\+]+-([0-9]+)\.html

Tout ce qui se trouve entre [] est considéré comme variable :
donc dans [a-zA-Z0-9\-_\+]+-([0-9]+)\.html
[a-zA-Z0-9\-_\+] : sera ma première variable pouvant être récupérée par $1
[0-9]+ : sera ma seconde variable pouvant être récupérée par $2

voilà, :wink:
 
WRInaute occasionnel
Petite mise à jour, sur certains serveur ma fonction nettoie_url nettoie un peu trop et ne fais pas tout comme il faut, bizarre,
mais au cas où, voici sa grande soeur, plus vieille certes, dépréciée sur certaines fonctions utilisées, mais qui a fait ses preuves :

Code:
function nettoie_url($nomPage){
	//on se débarasse des espaces
	$nomPage = trim($nomPage);
	//suppression du code html
	$nomPage = strip_tags($nomPage);
	//désencodage HTML
	$nomPage = html_entity_decode($nomPage);
	//suppression de la ponctuation
	$nomPage = ereg_replace("[\?!\./\(\)\"&ç=$\^%!:;,<>«»™|]", "", $nomPage);
    //minuscules
	$nomPage = strtolower($nomPage);
	//suppression des accents
	$nomPage = ereg_replace(" ", "-", $nomPage);
    $nomPage = ereg_replace("['’_]", "-", $nomPage);
	$nomPage = ereg_replace("[àâ]", "a", $nomPage);
	$nomPage = ereg_replace("[éèêë]", "e", $nomPage);
	$nomPage = ereg_replace("[ïî]", "i", $nomPage);
	$nomPage = ereg_replace("[öô]", "o", $nomPage);
	$nomPage = ereg_replace("[ùû]", "u", $nomPage);
	return $nomPage;
}

Appels aux développeurs en herbe de WRI, si vous souhaitez modifier l'une ou l'autres des fonctions proposées pour les rendre plus performantes, je suis pour que vous nous postiez votre mise à jour sur ce sujet, histoire d'en faire profiter tout le monde

Voilà :wink:
 
Nouveau WRInaute
Bonjour tout le monde!
Je sais que c'est un vieux post mais au lieu d'en ouvrir un nouveau, je continue celui ci ;)

J'ai un souci avec ma réécriture d'url... Je ne sais pas ce qui se passe, j'ai lu pas mal de forum, tuto, etc... Mais je n'arrive pas à faire ce que je veux.
Quelqu'un peut il m'aider?
Ce que je souhaite faire:
J'ai des pages www.exemple.ext/index.php?page=jeux ou www.exemple.ext/index.php?page=calcul, par exemple et je souhaite que cette page soit renomée en www.exemple.ext/jeux.php ou www.exemple.ext/calcul.php
Je suis chez Online en mutualisé, la réécriture est autorisée.
J'ai essayé plein de trucs mais cela ne marche jamis, soit on me dit que la page n'est pas trouvée, ou alors la redirection n'est pas prise en compte.

Pour le moment j'ai ça dans mon .htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^$ %{QUERY_STRING} [C]
#RewriteRule ^[a-zA-Z0-9\-_\+]\.php$ index.php?page=jeux [L]
RewriteRule ^jeux\.php$ /index.php?page=jeux [L]

Merci de votre aide!
 
Discussions similaires
Haut