URL rewrite avec un $_GET

Par DareK, il y a 11 ans


Bonjour,

J'ai un soucis avec un CMS que je suis entrain de faire, il y a un système de news et l'url des news est sous la forme

forgecms.dev/news?t=bienvenue-sur-forgecms

Et je voudrai que se soit sous la forme

forgecms.dev/news/bienvenue-sur-forgecms

J'ai essayer ce code dans le .htaccess

RewriteRule ^news/(.*)$ news?t=$1 [L]

Mais je n'y arrive pas, si vous avez une solution a me proposer,
Merci d'avance,
Cordialement.

14 réponses

TheTakylo, il y a 11 ans

Essaie ceci

RewriteRule ^news/(.*)$ news?t=$1 [QSA]
Bahamut45, il y a 11 ans

Bonjour,

On peut avoir ton htaccess complet ?

Cordialement

DareK, il y a 11 ans

Le début du code est fait pour enlever les .php dans les URL et aussi la ligne pour l'erreur 404.

Options +FollowSymLinks RewriteEngine on RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] RewriteRule ^news/(.*)$ news?t=$1 [L] ErrorDocument 404 /404.php
Bahamut45, il y a 11 ans

@ Vallyan : ce que l'on oublie souvent c'est que l'url rewriting est juste une utilisation des regex, il suffit de s'avoir ecrire la regex pour que le fonctionnement soit operationnel sur l'url réécrite ;)

Vallyan, il y a 11 ans

@Bahamut45: "On" ne l'oublie pas ;) ... tu saurais écrire cette règle en une ligne ?

Couss, il y a 11 ans

C'est normal tu essai d'accèder au fichier news (sans le .php)
essai ceci :

RewriteRule ^news/(.*)$ news.php?t=$1 [L]

A placer avant ta ligne supprimant les .php car ton flag [L] indique que le moteur d'URL rewriting doit arrêter sa recherche ici si l'URL correspond à l'expression régulière.

Vallyan, il y a 11 ans

Pour rendre le / optionnel:

RewriteRule ^news/?(.*)$ news.php?t=$1 [L]
Couss, il y a 11 ans

effectivement j'avais pas pensais a cette éventualitée
Merci Vallyan

Vallyan, il y a 11 ans

Oui enfin c'est pas top non plus: une url du type http://domaine.fr/newstiti matcherait comme http://domaine.fr/news/titi ...
Au pire deux rules du genre:

RewriteRule ^news/(.*)$ news.php?t=$1 [L] RewriteRule ^news$ news.php?t= [L]

pourrait marcher et ne matcherait pas newstiti. Attention: l'ordre des règles est a respecter !

Vallyan, il y a 11 ans

hé hé ... qui c'est le meilleur ?

RewriteRule ^news$|news/$|news/(.*)$ news.php?t=$1 [QSA,L]

:P

Bahamut45, il y a 11 ans

@ Vallyan : GG je m'incline fasse à ta dexterité sur les regex :p

DareK, il y a 11 ans

Merci a vous tous pour vos réponce qui mon aidé pour mon projet.