réécrire des urls /index.php?page=$valeur en /valeur

Nouveau WRInaute
Bonjour,

J'ai un site avec des URLs du type suivant :
http://www.example.com/index.php?page=accueil
J'ai défini des liens du type http://www.example.com/accueil
Après avoir fait pointer mes href sur le pattern de mes urls fictives, et après avoir bien vérifié toute la configuration, la nouvelle adresse (dynamique) s'affiche dans le navigateur...
Aucun intéret de changer mes liens puisque le résultat est le même dans la barre d'adresse !
En revanche, j'ai pu arriver, via l'utilisation de regex, à supprimer quelques éléments pour avoir des URLs du type http://www.example.com/?=accueil
Mais il semblerait que les caractères ? et = ne sont pas gérés par le mod_rewrite d'apache, dans l'adresse à réécrire.
J'ai bien essayé de les masquer comme pour les regex pcre, mais pas de résultat.

Pourriez-vous m'aider à avoir des URLs du type http://www.example.com/accueil,
càd avec le paramètre de la variable dans la barre d'adresse...

Les infos :
adresse fictive
http://www.example.com/accueil
adresse réelle
http://www.example.com/index.php?page=accueil

Le fichier .htaccess :
Code:
RewriteEngine On
RewriteRule ^(accueil|toto|tata|tonton )$ /index.php?page=$1 [L]
#qui permet d'afficher la page correcte, mais avec la même url qu'avant... grrr...
RewriteRule ^index(\.)([a-z0-9]*)$ http://www.example.com/ [L]
# qui permet de supprimer 'index' de l'url du navigateur.
RewriteRule ^page(=)$ http://www.example.com/ 
# qui supprime 'page' du navigateur...


Si c'est trop évident,
et/ou si je n'ai pas posté au bon endroit, merci de m'en informer par mp et de verrouiller ce thread.


edit dd32 : example.com pour les exemples d'url :wink:
 
WRInaute accro
>> Mais il semblerait que les caractères ? et = ne sont pas gérés par le mod_rewrite d'apache, dans l'adresse à réécrire.

et pourtant ils le sont. Tout le jeu de caractère est pris en compte.

Le = est un simple caractère.
Le ? est un métacaractère, il doit être échapper pour retrouver sa simple valeur de caractere si tel est son emploi dans ton code.
\?
 
WRInaute accro
Mysteriousfea a dit:
Tu aurais un code ?
Merci

pour cet exemple ?

-http://www.example.com/accueil
vers
-http://www.example.com/index.php?page=accueil

Code:
RewriteRule   ^(.*)$    /index.php?page=$1 [L]
 
WRInaute accro
pas franchement, mais j'ai encore droit a 1 tir ?

Code:
#execute la règle si le fichier existe
RewriteCond %{REQUEST_FILENAME} -f
#exlu le fichier index.php
RewriteCond %{REQUEST_URI} !^/index.php
#redirection
RewriteRule   ([^/]*)$    /index.php?page=$1 [R,L]
 
Nouveau WRInaute
Bonjour,

J'ai exactement le même problème!

Quand je mets l'adresse www.domaine.tld/valeur1/valeur2 dans mon navigateur et que je valide, il me fait une sorte de redirection et affiche dans la barre d'adresse www.domaine.tld/index.php?id=valeur1&id2=valeur2

Là je comprends pas trop ce qu'il se passe.

PS: je teste sous easyphp 2.0
 
WRInaute impliqué
Il faut savoir que Apache ajoute un / après une URL qui ne finit pas avec un type mime.

Donc une URL de la forme
http://www.example.com/accueil
est vue en fait comme
http://www.example.com/accueil/

On peut désactiver ce comportement, mais ce n'est pas conseillé. Je te laisse chercher dans la doc si tu veux vraiment le faire.

Donc tes règles ne doivent pas supposer que l'URL se fini sans / à la fin.

Par ailleurs, tu mets des [L] à la fin de tes règles, donc ça empêche l'execution des suivantes...

Enfin, pour filter ce qui suit le ? il faut utiliser QUERY_STRING

Essaie donc ce qui suit:

Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*) /index.php?page=$1

sans aucune autre règle.

La règle que tu voulais utiliser pour enlever index peut facilement faire boucler. Et ta dernière règle ne peut pas filtrer ce qui suit le ?
 
Nouveau WRInaute
Bonsoir!

Merci pour ta réponse, mais j'ai essayé ce que tu disais et cela ne change rien au fait qu'après avoir tapé l'adresse réécrite dans la barre de lien de mon navigateur, il me reaffiche l'ancienne adresse.

C'est vraiment bizarre ce problème, en plus je ne trouve pas d'autres personnes dans mon cas.

Merci en tout cas!
 
WRInaute impliqué
As tu vidé le cache et l'historique de ton navigateur?

IL faut que tu enlève tout ça pour tester une nouvelle redirection.

Si le problème persiste demande a ton hébergeur pourquoi ta réécriture ne marche pas.
 
WRInaute accro
stoooppp it !!

Si cela ne marche pas, c'est que le serveur refuse les fichiers réécrit sans extention !!

Game over :D
 
WRInaute impliqué
KOogar a dit:
stoooppp it !!

Si cela ne marche pas, c'est que le serveur refuse les fichiers réécrit sans extention !!

Game over :D

Ce serait du a quelle option?

Apache est reconfigurable par fichier .htaccess en principe.
 
WRInaute accro
non... il faut avoir la main sur le serveur et la reconfiguration se fait à partir du fichier httpd.conf
 
WRInaute impliqué
KOogar a dit:
non... il faut la main sur le serveur et la reconfiguration se fait à partir du fichier httpd.conf

Ca je sais, merci :D

Mais par defaut c'est tout reconfigurable.

Et la vrai question est: quelle serait l'option qui interdirait la récriture de fichiers sans extension?

Par défaut, un / est ajouté quand il n'y a pas d'extension. Donc il faut prendre en compte cette / terminale dans les règles, c'est ce que j'ai proposé il me semble.

Mais là la réécriture semble marcher puisque le bon contenu s'affiche. C'est la'ffichage de l'adresse réécrite qui semble bizarre.
 
WRInaute accro
>> Apache est reconfigurable par fichier .htaccess en principe.

C'est ici que je t'ai répondu non. On peux donner des directives a Apache a partir du fichier .htaccess mais en aucun cas on peut reconfigurer le serveur a partir de ce fichier.

Comme faire cela, j'en ai aucune idée. Par experience, certain serveur accepte les fichiers réécrient sans extention, d'autres non.

A partir du moment ou cette règle est mauvaise par principe:
RewriteRule (.*) /index.php?page=$1
-> mélange fichier/répertoire

..je ne vois pas trop l'interet de s'attarder sur ce problème.
 
WRInaute impliqué
KOogar a dit:
>> Apache est reconfigurable par fichier .htaccess en principe.

C'est ici que je t'ai répondu non. On peux donner des directives a Apache a partir du fichier .htaccess mais en aucun cas on peut reconfigurer le serveur a partir de ce fichier.

Dans la doc Apache :
http://httpd.apache.org/docs/2.0/fr/configuring.html#htaccess

il est explicitement dit que
Apache permet de délocaliser la gestion de la configuration, au moyen de fichiers spéciaux, placés directement dans l'arborescence Web. Ces fichiers spéciaux portent le plus souvent le nom .htaccess, mais il est bien sûr possible de changer ce nom au moyen de la directive AccessFileName. Les directives positionnées dans un fichier .htaccess s'appliquent au répertoire le contenant ainsi qu'à tous ses sous-répertoires. La syntaxe à employer dans un fichier .htaccess est identique à la syntaxe des fichiers de configuration principaux. De plus, les fichiers .htaccess étant lus au moment de chaque requête les concernant, toute modification de ces fichiers prend effet immédiatement sans qu'il soit nécessaire de redémarrer le serveur.

Pour savoir si une directive peut être placée dans un fichier .htaccess, il suffit de vérifier son Contexte. Il est possible à l'administrateur du serveur de spécifier quelles directives sont autorisées ou non dans les fichiers .htaccess, au moyen de la directive AllowOverride, positionnée dans les fichiers de configuration principaux.

C'est pour cela que la question intéressante est de savoir quelle serait la directive qui controle le comportement que tu décrit.
 
WRInaute accro
"Apache permet de délocaliser la gestion de la configuration"

vu les options ca fait sourire ^^

Regarde les directives et le contexte:
http://httpd.apache.org/docs/2.0/fr/mod/core.html

En tout cas, relisant la doc avec plaisir, ca faisait longtemps que je cherchais comment avoir plusieurs fichiers .htaccess et j'ai enfin trouvé!!

Code:
AccessFileName .htaccess_bis

:D
 
WRInaute impliqué
Tu ne répond jamais a ma question: quelle serait la directive qui controle le comportement que tu décris (interdire la réécriture pour les adresses sans extension mime)?

C'est seulement en la connaissant qu'on peut savoir s'il est possible de changer le comportement dans un .ht access.

Et tant mieux si la doc te fais sourire...
 
WRInaute impliqué
Pour revenir au pb de départ, essaie de rajouter ça dans ton .htaccess:

Code:
Options -MultiViews
 
WRInaute accro
Vap a dit:
Tu ne répond jamais a ma question: quelle serait la directive qui controle le comportement que tu décris (interdire la réécriture pour les adresses sans extension mime)?

...j'ai répondu très honnetement 2 posts avant :
KOogar a dit:
Comme faire cela, j'en ai aucune idée. Par experience, certain serveur accepte les fichiers réécrient sans extention, d'autres non.
 
Discussions similaires
Haut