Aller au contenu

URL Rewrite nickel sur EasyPhp pas sur OVH


Sujets conseillés

Bonjour à tous,

J'ai mis en place l'URL Rewriting sur mon site en local sur Easyphp, cela marche nickel avec :

httpd.conf :

<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 :

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:

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:

Robin

Lien vers le commentaire
Partager sur d’autres sites

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

RewriteRule ^(.*)$ index.php

RewriteRule .* /index.php [L]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

|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 $...

Je me demande tout de même où mod_rewrite va chercher ton $1 dans "RewriteCond $1 .... " :?:

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 ):

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...

Lien vers le commentaire
Partager sur d’autres sites

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 ):

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:

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

Lien vers le commentaire
Partager sur d’autres sites

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.

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 !

Lien vers le commentaire
Partager sur d’autres sites

Il faut virer le $1 déjà c'est sûr.
La condition marche bien sur easyphp pourtant...

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 :

RewriteEngine On
azerty
RewriteBase /
RewriteRule ^testing\.php$ / [L]
RewriteRule ^(.*)$ /testing.php [L]

Il ne me met pas d'erreur.

Si je met :

azerty
RewriteEngine On
RewriteBase /
RewriteRule ^testing\.php$ / [L]
RewriteRule ^(.*)$ /testing.php [L]

Il me met : Internal Server Error

Bizarre non ?

Lien vers le commentaire
Partager sur d’autres sites

Relis bien ce que Dan t'a écrit :

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 ;-)

Lien vers le commentaire
Partager sur d’autres sites

Relis bien ce que Dan t'a écrit :

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 ?

Lien vers le commentaire
Partager sur d’autres sites

Ton mod_rewrite est bien activé en local ?? par défaut dans EasyPHP ce n'est pas le cas il me semble...

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

Lien vers le commentaire
Partager sur d’autres sites

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

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();

}

}

?>

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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 :!:

Je modifie le titre (ainsi que ton post)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...