URL Rewriting en local

URL Rewriting en local - Divers - Programmation

Marsh Posté le 12-01-2012 à 10:24:08    

Voilà , je vous expose mon cas de figure :
 
http://localhost, selon la configuration, renvoi sur le contenu ci-dessous via le browser :  
 

Code :
  1. Name       Last modified            Taille
  2. [ ]  site01/     10-Jan-2012 10:15     -
  3. [ ]  site02/     10-Jan-2012 10:10     -
  4. [ ]  site03/     10-Jan-2012 10:10     -


 
Quand je clique sur site01/ je souhaiterais donc naviguer sur le site "site01" et faire en sorte qu’il fonctionne comme s’il s’agissait de la racine du site.
http://localhost/site01/
 
Contenu du directory site01/ :
 
 

Code :
  1. ../www/
  2.   ../site01/
  3.     index.php
  4.     .htaccess
  5.     menu01.php
  6.     menu02.php
  7.       menu01/
  8.         image01.jpg
  9.         image02.jpg
  10.         mini/
  11.           image01.jpg
  12.           image02.jpg
  13.       css/
  14.         style.css


 
J’ai donc créé un fichier .htaccess que j’ai placé dans le répertoire site01/ afin de réécrire les URLs envoyées.

Code :
  1. Options +FollowSymlinks
  2. RewriteEngine On
  3. RewriteRule ^([a-z]+)/$ index.php?menu=$1 [L]
  4. RewriteRule ^([a-z]+)$ index.php?menu=$1 [L]
  5. RewriteRule ^([a-z]+)/([a-z]*)$ index.php?menu=$1&categorie=$2 [L]


Voilà exactement ce que j’aurais souhaité avoir :  
Base
Url appelée : http://localhost/site01/menu01
Url réécrite : http://localhost/site01/index.php?menu=menu01
Sous menu
Url appelée : http://localhost/site01/menu01/categorie01
Url réécrite : http://localhost/site01/index.php? [...] ategorie01
[…]
J’arrive à très bien faire fonctionner le tout mais avec l’extension .html comme paramètre de réécriture (http://localhost/site01/menu01-categorie01.html) or je veux sans ;)
 
Si un répertoire existe, je ne souhaite donc pas pouvoir y accéder, mais réécrire l’url.
Ex : Url appelée http://localhost/site01/repertoire/
Url réécrite : http://localhost/site01/index.php (en clair retourner sur la page d’accueil du site)
 
Le contenu de mon fichier index.php appelle différents fichiers css, jpg, … et je n’arrive pas à trouver le bon formatage de ma ligne de commande pour que cela fonctionne parfaitement…
Mes fiches de styles .css sont dans le répertoire /css/
Mes images utilisées pour le site sont dans le répertoire /img/

Extrait :
[…]
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
[…]
<img src="/img/logo.png" />
[…]
 
Actuellement, avec ce type de configuration, quand je saisis par ex :  
http://localhost/site01/menu01, si le répertoire existe, il m’affiche curieusement la bonne url, à savoir http://localhost/site01/index.php?menu=menu01, mais et je ne peux l’expliquer, les images et autres fiches de styles ont sautées alors que si menu02 n’existe pas, tout fonctionne à merveille …dans la barre d’adresse on peut voir : http://localhost/site01/menu01/?menu=menu01, si je modifie légèrement le fichier .htaccess en mettant un "/" devant indext.php…, comme ceci :  
 
RewriteRule ^([a-z]+)$ /index.php?menu=$1 [L]
RewriteRule ^([a-z]+)/$ /index.php?menu=$1 [L]
 
, l’url appelée me renvoi une erreur 404 qui d’ailleurs meme avec les lignes ci-dessous n’est même pas personnalisée :  
 
ErrorDocument 404 index.php?menu=404
ErrorDocument 403 index.php?menu=403
 
Contenu de mon projet01 pour exemple :
 

Code :
  1. ../site01/
  2.   index.php
  3.   .htaccess
  4.   menu01.php
  5.   menu02.php
  6.   menu01/
  7.     image01.jpg
  8.     image02.jpg
  9.     mini/
  10.       image01.jpg
  11.       image02.jpg
  12.   css/
  13.     style.css


 
http://localhost/site01/ appelle donc par défaut : http://localhost/site01/index.php
http://localhost/site01/menu01 devrait renvoyer http://localhost/site01/index.php?menu=menu01
Mon fichier index.php fait un include de la variable $menu et donc si elle existe tout est ok, sinon par défaut page d’accueil.
Include donc aussi de ma fiche de style css…


Message édité par Odissine le 13-01-2012 à 13:10:03
Reply

Marsh Posté le 12-01-2012 à 10:24:08   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed