Version complète: sur le forum Webmaster Hub : URL Rewrite nickel sur EasyPhp pas sur OVH
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
Robix
Bonjour à tous,

J'ai mis en place l'URL Rewriting sur mon site en local sur Easyphp, cela marche nickel avec :
httpd.conf :
CODE
<Directory "C:/Logiciels/EasyPHP/www/*******">
Options FollowSymLinks Indexes
RewriteEngine on
RewriteCond $1 !^(panel|admin|images|sitemap\.xml|style\.css|favicon\.ico|robots\.txt) [NC]
RewriteRule ^(.*)$ index.php
</Directory>


(Le but étant de tout rediriger vers index.php.)
J'ai voulu le basculé sur OVH (hébergement mutualisé 60gp) en faisant un .htaccess :
CODE
RewriteEngine on
RewriteCond $1 !^(panel|admin|images|pop-up\.php|imprimer\.php|afficher_image\.php|imprimer_guide\.php|sitemap\.xml|style\.css|favicon\.ico|robots\.txt) [NC]
RewriteRule .* /index.php [L]


Le htaccess est placé dans le bon dossier (/www/), j'ai tout testé pendant 2 jours, impossible à faire marcher... mad2.gif
Le .htaccess ne semble pas pris en compte par apache d'OVH :
quand j'écris n'importe quoi sur la premiere ligne (RewriteEngine on). Il me sort Internal Server Error
quand j'écris n'importe quoi sur une des lignes suivantes : il ne me dit rien, les règles de réécriture ne sont pas absolument pas prises en compte.

Est ce que quelqu'un aurait une idée pour me faire avancer ?

Merci d'avance blush.gif

Robin
pluriels
Je ne suis pas un pro de la réécriture, mais je vois une différence là :

RewriteRule ^(.*)$ index.php

RewriteRule .* /index.php [L]
Robix
Bonsoir,
J'ai bien sur tester toutes les configurations possibles (les ^, les $, les / , etc.) rien n'y fait.

Qualqu'un aurait-il une idée ?

Merci d'avance

Robin
iNCiTE Web
CODE
|robots\.txt) [NC]

Il manque pas un $ avant le [NC] par hasard ;
Mais c'est étonnant que ça fonctionne en local ; tu es sûr d'avoir la même chose ?? (à part le /index.php, obligatoire chez OVH)
Dan
Je me demande tout de même où mod_rewrite va chercher ton $1 dans "RewriteCond $1 .... " r_question6161.gif
iNCiTE Web
Arfffff j'avais même pas vu du coup !! ça n'a pas l'ai de déranger Apache/Win en tous cas...
Robix
CITATION(iNCiTE Web @ lundi 30 juin 2008 à 07:18) *
CODE
|robots\.txt) [NC]

Il manque pas un $ avant le [NC] par hasard ;
Mais c'est étonnant que ça fonctionne en local ; tu es sûr d'avoir la même chose ?? (à part le /index.php, obligatoire chez OVH)

Je crois que le ^ et le $ sont facultatifs (mais plus rigoureux certes). Cela fonctionne en local avec et sans $...

CITATION(Dan @ lundi 30 juin 2008 à 07:43) *
Je me demande tout de même où mod_rewrite va chercher ton $1 dans "RewriteCond $1 .... " r_question6161.gif


Hum oui effectivement c'est étrange (je suis pas spécialiste de mode rewrite) mais en tout cas il me prends bien en compte ma condition (sur Apache en local).

Ce que je ne comprends pas c'est que juste en placant mon .htaccess sur mon mut OVH (dossier /www/) contenant (cf http://guide.ovh.com/HtaccessModRewrite ):
CODE
RewriteEngine On
RewriteRule .* /testing.php

(également testé ^(.*)$, avec ou sans / etc)

Rien ne se passe quand je tape www.monsite.com/blablabla. (Il ne va pas chercher testing.php, il met Page Introuvable).

Y a-t-il moyen de tester simplement le fonctionnement de fichier htaccess sur mon compte ?
Merci...

Dan
CITATION(Robix @ lundi 30 juin 2008 à 09:46) *
Ce que je ne comprends pas c'est que juste en placant mon .htaccess sur mon mut OVH (dossier /www/) contenant (cf http://guide.ovh.com/HtaccessModRewrite ):
CODE
RewriteEngine On
RewriteRule .* /testing.php

(également testé ^(.*)$, avec ou sans / etc)

Rien ne se passe quand je tape www.monsite.com/blablabla. (Il ne va pas chercher testing.php, il met Page Introuvable).

Assez logique, vu que tu rediriges TOUT, y compris donc testing.php
Tu devrais utiliser par exemple:
CODE
RewriteEngine On
RewriteRule testing\.php - [L]
RewriteRule .* /testing.php [L]


Pense aussi à utiliser le flag [L] (pour Last) parce qu'il est inutile de parcourir le reste de la liste lorsqu'un match est trouvé.

Dan
iNCiTE Web
CITATION
Je crois que le ^ et le $ sont facultatifs (mais plus rigoureux certes). Cela fonctionne en local avec et sans $...


Euh peut être mais soit tu mets les 2, soit aucun... le fait que Apache pour Windows accepte tout et n'importe quoi n'est pas vraiment une bonne référence ; il n'est disponible qu'à des fins de tests uniquement ; il peut donc avoir des comportements imprévus.

CITATION
Hum oui effectivement c'est étrange (je suis pas spécialiste de mode rewrite) mais en tout cas il me prends bien en compte ma condition (sur Apache en local).


Il faut virer le $1 déjà c'est sûr.

Edit : grilled par Dan !
Robix
CITATION(iNCiTE Web @ lundi 30 juin 2008 à 09:06) *
Il faut virer le $1 déjà c'est sûr.
La condition marche bien sur easyphp pourtant...

CODE
RewriteEngine On
RewriteBase /
RewriteRule ^testing\.php$ / [L]
RewriteRule ^(.*)$ /testing.php [L]
ne fonctionne toujours pas... (avec ou sans RewriteBase /)

Ce que je comprends moins c'est que si je fait un htaccess :
CODE
RewriteEngine On
azerty
RewriteBase /
RewriteRule ^testing\.php$ / [L]
RewriteRule ^(.*)$ /testing.php [L]
Il ne me met pas d'erreur.

Si je met :
CODE
azerty
RewriteEngine On
RewriteBase /
RewriteRule ^testing\.php$ / [L]
RewriteRule ^(.*)$ /testing.php [L]
Il me met : Internal Server Error

Bizarre non ?
iNCiTE Web
Relis bien ce que Dan t'a écrit :
CODE
RewriteRule ^testing\.php$ - / [L]


Tu as oublié le "-" qui précise d'ignorer le fichier testing.php, sinon on tourne en rond.
Il suffit pas de recopier (sans se tromper lol), c'est bien aussi de comprendre ;-)
Robix
CITATION(iNCiTE Web @ lundi 30 juin 2008 à 13:19) *
Relis bien ce que Dan t'a écrit :
CODE
RewriteRule ^testing\.php$ - / [L]


Tu as oublié le "-" qui précise d'ignorer le fichier testing.php, sinon on tourne en rond.
Il suffit pas de recopier (sans se tromper lol), c'est bien aussi de comprendre ;-)


Je ne savais pas à quoi servait le "-". Cela ne marche toujours pas, mais que pense tu du reste : erreur non detecté à partir de la 2eme ligne ?
iNCiTE Web
Ton mod_rewrite est bien activé en local ?? par défaut dans EasyPHP ce n'est pas le cas il me semble...
CODE
LoadModule rewrite_module modules/mod_rewrite.so
dans httpd.conf
Ce qui expliquerait pourquoi il ignore l'erreur une fois dans la rewrite et pas dans le fichier .htaccess
Robix
Salut à tous,

Le problème est résolu, cela était du à un mauvais formatage de mon htaccess (édité sous notepad++), avec le blocnote cela est passé tout de suite. Bref erreur à la con qui m'a fait tourné en rond un bon bout de temps.

En tout cas merci à tous pour votre patience

Robin

ps: htaccess final
CODE
RewriteEngine on
RewriteRule ^(index.php|admin|images|pop-up\.php|imprimer\.php|afficher_image\.php|imprimer_guide\.php|sitemap\.xml|style\.css|favicon\.ico|robots\.txt) - [L]
RewriteRule ^(.*)$ /index.php [L]


Je redirige tout vers index.php et c'est lui qui traite la page demandé :
CODE
<?php

// MODE DEBUG
//echo $_SERVER['REQUEST_URI'];

$racine ='/';

if (ereg('^'.$racine.'+$', $_SERVER['REQUEST_URI'], $req)){
include('front.php');
}
else if (ereg('^'.$racine.'(fr|en)$', $_SERVER['REQUEST_URI'], $req)){

header("Location:".$req[1].'/');
}
else if (ereg('^'.$racine.'(fr|en)/$', $_SERVER['REQUEST_URI'], $req)){

$lang = $req[1];
include('lang_'.$lang.'.php');
$_GET['page'] = 'accueil';
$_GET['lang'] = $lang;
include 'index.inc.php';
}
else{

if(ereg('^'.$racine.'(fr|en)/([a-zA-Z0-9\.&-]*)\?mode=([a-zA-Z0-9\.]+)\&cat=([a-zA-Z0-9\.]+)$', $_SERVER['REQUEST_URI'], $req)){
if ($req[1]=='fr'){
$lang = 'fr';
include('lang_fr.php');
}else{
$lang = 'en';
include('lang_en.php');
}

if ($req[2]==*************| $req[2]==**************){
$_GET['page'] = 'location';
$_GET['lang'] = $lang;
$_GET['mode'] = $req[3];
$_GET['cat'] = $req[4];
include 'index.inc.php';
}else{

echo ' Mauvaise URL : 404';
die();
}

}else if(ereg('^'.$racine.'(fr|en)/([a-zA-Z0-9\.&-]*)\?mode=([a-zA-Z0-9\.]+)$', $_SERVER['REQUEST_URI'], $req)){
if ($req[1]=='fr'){
$lang = 'fr';
include('lang_fr.php');
}else{
$lang = 'en';
include('lang_en.php');
}

if ($req[2]==********| $req[2]==***********){
$_GET['page'] = 'location';
$_GET['lang'] = $lang;
$_GET['mode'] = $req[3];
include 'index.inc.php';
}else{
echo ' Mauvaise URL : 404';
die();
}

}else if(ereg('^'.$racine.'(fr|en)/([a-zA-Z0-9\.&-]*)\?appart=([a-zA-Z0-9\.]+)$', $_SERVER['REQUEST_URI'], $req)){

// Langue
if ($req[1]=='fr'){
$lang = 'fr';
include('lang_fr.php');
}else{
$lang = 'en';
include('lang_en.php');
}

// Pages
if ($req[2]==*************| $req[2]==*************){
$_GET['page'] = 'pre-reservation';
$_GET['lang'] = $lang;
$_GET['appart'] = $req[3];
include 'index.inc.php';
}else{
echo ' Mauvaise URL : 404';
die();
}

}else if (ereg('^'.$racine.'(fr|en)/([a-zA-Z0-9\.&-]*)$', $_SERVER['REQUEST_URI'], $req)){

// Langue
if ($req[1]=='fr'){
$lang = 'fr';
include('lang_fr.php');
}else{
$lang = 'en';
include('lang_en.php');
}

// Pages
if ($req[2]=='' | $req[2]=='home.html' | $req[2]=='accueil.html'){
$_GET['page'] = 'accueil';
}
...
else if ($req[2]=='tignes.html'){
$_GET['page'] = 'tignes';
}
else{

echo 'Page inconnu : 404';
die();
}

$_GET['lang'] = $lang;
include 'index.inc.php';

}else{
echo ' Mauvaise URL : 404';
die();
}
}

?>
silexian
tout est résolu, mais n'empêche, tu n'as pu éviter d'incriminer fortement ton hébergeur, qui, sur le coup, n'y étais pour rien...

"*** m'a tuer". Un peu fort quand même. Etait-ce pour attirer l'oeil ? J'ai vu un thread là dessus sur WRI, et effectivement, pour attirer du monde, il faut un titre percutant !
Dan
CITATION(silexian @ mercredi 2 juillet 2008 à 23:52) *
tout est résolu, mais n'empêche, tu n'as pu éviter d'incriminer fortement ton hébergeur, qui, sur le coup, n'y étais pour rien...

C'est malheureusement courant ! La faute est toujours ailleurs et jamais chez soi q_smallexcla.gif
Je modifie le titre (ainsi que ton post)

Dan
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.