Réécriture d' URL: monsite.com/flux.php?id=1&titre=test

  • Auteur de la discussion Auteur de la discussion bef1rst
  • Date de début Date de début
WRInaute discret
Bonjour,

je veux réécrire mes urls sous cette forme : -www.monsite.com/test.html.

Pour le moment, mes url sont de la forme : -www.monsite.com/flux.php?id=1&titre=test

Je pensais utiliser cette synthaxe dans mon fichier .htaccess mais je n'obtient aucun changement :

# -FrontPage-

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName -www.bef1rst.com
AuthUserFile /home/bef1rst/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/bef1rst/public_html/_vti_pvt/service.grp

RewriteEngine on
RewriteRule ^([0-9]+)-([0-9]+)\.html$ flux.php?id=$1&titre=$2 [L]

Pouvez vous m'aider ?

Une autre petite question, j'ai un blog sur mon site et il a son propre fichier htaccess. Est ce génant ? Dois je regrouper tous ces fichiers en 1 ?

Merci
 
A
Anonymous
Guest
^([0-9]+)-([0-9]+)\.html$ veut dire que tu attends des url avec du numerique de la forme 12345-6789.html

Pour obtenir des url rewritées de la form flux.php?id=$1&titre=$2
- dans le htaccess ^([0-9]+)-([a-zA-Z]+)\.html$
- et des pages 1234-test.html

Parce que dans le cas exposé je ne vois pas de numérique dans la page appelée.
 
WRInaute discret
merci pour ta reponse, je vais tester cela rapidement. Mais tu peux me dire si le fait de placer le fichier .htaccess dans un repertoire permet d'appliquer les regles uniquement pour les pages contenues dans ce repertoire.

A+
 
WRInaute discret
marche pas...

J'ai pour tout mis :

RewriteEngine on
RewriteRule ^([0-9]+)-([a-zA-Z]+)\.html$ flux.php?id=$1&titre=$2 [L]

dans le fichier .htaccess a la racine de mon site...

Une idée ?
 
A
Anonymous
Guest
Oui c'est exactement ce qu'il faut faire. le htaccess placé dans un sous-directory sera utilisé par le serveur HTTP en lieu et place de celui du directory parent sauf si l'option inherit est utilsé dans le paramètre "RewriteOptions" (cf. aide mod_rewrite) auquel cas le htaccess parent est aussi utilisé.

Les règles positionnés sur ce directory seront aussi valables pour les sous-directory de celui-ci.
The RewriteOptions directive sets some special options for the current per-server or per-directory configuration. The Option strings can be one of the following:

inherit
This forces the current configuration to inherit the configuration of the parent. In per-virtual-server context this means that the maps, conditions and rules of the main server are inherited. In per-directory context this means that conditions and rules of the parent directory's .htaccess configuration are inherited.
 
A
Anonymous
Guest
Sinon pour obtenir
w-w.monsite.com/flux.php?id=1&titre=test
à partir de
w-w.monsite.com/test.html

du doit écrire
^([a-zA-Z]+)\.html /flux.php?id=1&titre=$2

mais ta valeur id est fixe car dans l'url de base je ne vois pas ou tu peux la récupérer....
 
WRInaute discret
je te donne l'adresse de la page :

http://www.bef1rst.com/dev/index.php .

Le premier lien pointe vers :
http://www.bef1rst.com/dev/flux.php?id= ... oic-lemeur

et je veux obtenir :
http://www.bef1rst.com/dev/1-loic-lemeur.html

Le fichier .htaccess a été placé à cette adresse :
http://www.bef1rst.com/dev/.htaccess

avec cette synthaxe :

# -FrontPage-

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName www.bef1rst.com
AuthUserFile /home/bef1rst/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/bef1rst/public_html/_vti_pvt/service.grp

RewriteEngine on
RewriteRule ^([0-9]+)-([a-zA-Z]+)\.html$ flux.php?id=$1&titre=$2 [L]

Une idée de l'erreur ? Merci encore pour votre aide
 
A
Anonymous
Guest
Tu veux faire l'inverse de ce que tu demandais et de plus tu n'es pas sur la racine de ton site comme tu l'avais dis

dans ta page les liens doivent être fait comme suit
Code:
<a href="http://www.bef1rst.com/dev/1-loic-lemeur.html">...</a>

dans ton htaccess
Code:
  RewriteBase /dev
  RewriteRule ^([^-]+)-(.+)\.html$ /dev/flux.php?id=$1&titre=$2 [L]
 
WRInaute discret
1/ Je récapituel pour être sur que l'on parle bien de la même chose :

- dans mon fichier index.php, les liens doivet être de la forme <a href="http://www.bef1rst.com/dev/1-loic-lemeur.html">...</a> . De ce coté la, je pense aue c'est ok. J'ai recomposé mes url dynamiquement en respectant cette structure. (http://www.bef1rst.com/dev/) avec ce code :

echo '<a href="' .$row[id]. '-'.$row[titre].'.html">' .$row[nom]. '</a><br>' ;

- mais pour le fichier actuel flux.php, je ne peux plus récupérer l'id dans l'URL avec cette syntaxe... C'est ce que je ne comprends pas.

$idurl = $_GET['id'];
$result = mysql_query("SELECT id,nom,adresse from dev where id=$idurl");

2/ Je cherche bien a obtenir des rul du type http://www.bef1rst.com/dev/1-loic-lemeur.html avec le fichier flux.php.

3/ J'ai modifié le code du .htaccess avec ta proposition:

RewriteBase /dev
RewriteRule ^([^-]+)-(.+)\.html$ /dev/flux.php?id=$1&titre=$2 [L]

mais nous sommes bien d'accord que c'est le fichier htaccess à la racine du site qui doit être modifié ?

Merci pour ta persévérance Darfire, et bravo pour le design de ton site qui est très sympa!
 
A
Anonymous
Guest
Non c'est celui du directory /dev

- pour un htaccess dans le directory /dev
Code:
RewriteBase /dev 
RewriteRule ^([^-]+)-(.+)\.html$ /dev/flux.php?id=$1&titre=$2 [L]
- pour un htaccess à la racine de ton site
Code:
RewriteRule ^dev/([^-]+)-(.+)\.html$ /dev/flux.php?id=$1&titre=$2 [L]
Dans ce 2ème cas ne met pas de htaccess dans ton directory /dev sauf si tu lui insères l'option "RewriteOptions" à "inherit" (voir mon post + haut)
 
WRInaute discret
OK c'est parfait. L'url rewritting fonctionne a merveille car quand je clic sur le lien "h**p://www.bef1rst.com/dev/1-loic-lemeur.html" dans la page index de mon test "h**p://www.bef1rst.com/dev/", j'arrive bien sur la page flux.php MAIS a ce moment la, je ne sais pas comment récupérer mon paramétre "id" pour composer ma requète..... ?

Avant l'url rewritting, je procédais de la sorte :

$idurl = $_GET['id'];
$result = mysql_query("SELECT id,nom,adresse from dev where id=$idurl");

while ( $row = mysql_fetch_array($result))
{
echo '<b>Nom du site: ' .$row[nom]. '</b><br>Adresse du flux: ' .$row[adresse]. '<br>ID: ' .$row[id].'<br><br>';

...
L'erreur que l'on peut voir correspond a la ligne :
while ( $row = mysql_fetch_array($result))
 
WRInaute discret
Oups, désolé je m'etais trompé, tout fonctionne parfaitement désormais !!! Merci beaucoup pour ta persévérance et la qualité de tes explications. Tu as été d'une grande aide pour mettre en place ce p*#[_( d'url rewritting....
 
Discussions similaires
Haut