Aller au contenu

urlrewiting chez OVH


Sujets conseillés

Bonjour,

dans un /dossier/ je dispose d'uun script php (fichier.php) et d'un fichier .htaccess

Un urlrewiting dans le fichier .htaccess permet de protéger le dossier

chez mon hébergement principal cela fonctionne paafaitement:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !^(.*)/fichier.php$
RewriteRule ^(.*)$ fichier.php?path=$1 [QSA,L,NS]

mais=>Je souhaite simplement dupliquer et déplacer le /dossier/ contenant le fichier.php et son .htaccess

sur un autre hébergement chez OVH ( 90 mutualisé)

Les régles d'urlrewiting sont différentes et spéciales chez cet hébergeur OVH

et je n'arrive pas à trouver la bonne formule pour retrouver mes fonctions...

j'ai essayé sans "Options +FollowSymlinks

", de mettre des slashs un peu partout, j'ai essayé aussi en rajouant /dossier/fichier.php sans succès...

L'un d'entre-vous, aimables lecteurs, pourrait-il m'aider ?

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

La seule particularité chez OVH, c'est que le second paramètre des rewriterule doit être renseigné en 'base relative', c'est à dire avec le chemin complet depuis la racine du domaine et donc commencer par un slash

Pour ton cas, je ferais :

RewriteEngine on
RewriteCond %{REQUEST_URI} !fichier.php$
RewriteRule ^(.*)$ /fichier.php?path=$1 [QSA,L,NS]

(si ton fichier.php est bien à la racine du domaine, sinon il faut rajouter le chemin)

Modifié par Remi
Lien vers le commentaire
Partager sur d’autres sites

La seule particularité chez OVH, c'est que le second paramètre des rewriterule doit être renseigné en 'base relative', c'est à dire avec le chemin complet depuis la racine du domaine et donc commencer par un slash

Pour ton cas, je ferais :

RewriteEngine on
RewriteCond %{REQUEST_URI} !fichier.php$
RewriteRule ^(.*)$ /fichier.php?path=$1 [QSA,L,NS]

(si ton fichier.php est bien à la racine du domaine, sinon il faut rajouter le chemin)

Bonsoir,

Merci pour ton info

le fichier php est dans le dossier ( /www/dossier/ ) avec le .htaccess

A ton avis, je dois rajouter home/login/www/dossier/ ou le http://www/site.com/dossier/ ?

je vois que tu as changé le code

!^(.*)/fichier.php$

en

!^(.*)!fichier.php$

?

tu peux m'indiquer pourquoi ?

le plus rageant, c'est que mon htaccess fonctionne dans son dossier sur un autre hébergeur

Il suffit que je doive simplement copier/coller le dossier vers OVH pour ne plus obtenir l'objectif...

Merci pour tes précisions

cordialement

Lien vers le commentaire
Partager sur d’autres sites

A ton avis, je dois rajouter home/login/www/dossier/ ou le http://www/site.com/dossier/ ?

Ni l'un, ni l'autre... :blush:

(le premier est le chemin depuis la racine du serveur alors que le second est une url fantaisiste...)

Il faut le chemin depuis la racine du domaine, donc:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/fichier\.php$
RewriteRule ^(.*)$ /dossier/fichier.php?path=$1 [QSA,L,NS]

Sinon, j'avais effectivement simplifié ta condition parce que je ne savais pas si tu étais à la racine. De toutes façon ^(.*) ne sert strictement à rien dans une ligne condition... tu peux toutefois le laisser si tu trouves que cela fait plus joli. :P

Lien vers le commentaire
Partager sur d’autres sites

Ni l'un, ni l'autre... :blush:

(le premier est le chemin depuis la racine du serveur alors que le second est une url fantaisiste...)

Il faut le chemin depuis la racine du domaine, donc:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/fichier\.php$
RewriteRule ^(.*)$ /dossier/fichier.php?path=$1 [QSA,L,NS]

bonsoir,

Hélas... malgré tes indications et un copier coller: echec

De toutes façon ^(.*) ne sert strictement à rien dans une ligne condition... tu peux toutefois le laisser si tu trouves que cela fait plus joli. :P
disons que je ne maîtrise rein du tout et je partais du principe que le code .htaccess initial fonctionne chez l'autre hébergeur :wacko:

je récapitule:

J'ai le fichier.php et le .htaccess dans un dossier

Ce dossier est placé à la racine du site

je colle le code dans le .htaccess

j'ai fait un test simple de rewriting poure m'assurer que l'hébergement acceptait les redirections

:nonono: je suis un peu dans le brouillard

As-tu une idée ?

Lien vers le commentaire
Partager sur d’autres sites

Rémi,

je publie le contenu du fichier.php car il pourrait permettre de résoudre mon problème :mad2:

<?php

define("NOM_COOKIE","biscuit");
define("URL_PORTAIL","http://www.portail.com");

/* *************************************** */


// Ici il faut vérifier que l'utilisateur est logué
if ($_COOKIE[NOM_COOKIE] == "")
{ // et sinon (cookie vide) rediriger vers le formulaire.
header("Location: " . URL_PORTAIL);
die();
}

// on vérifie que le chemin demandé existe (sinon on est redirigé vers une 404)
$chemin = try_filepath($_GET['path']);


// Vérifier qu'on n'essaye pas de télécharger le script PHP lui-même
if ( ($_GET['path'] == "") || (realpath($chemin) == $_SERVER['SCRIPT_FILENAME'])
|| (strpos($_GET['path'],"..") !== false) // ni un fichier au dessus
|| ($_GET['path']{0} == '/') // ni un chemin absolu
|| ($_GET['path']{0} == '.') // ni un fichier invisible comme .htaccess
)
{ // Empêche une faille de sécurité
header("HTTP/1.0 403 Forbidden");
die("Bien essayé !Nice Try ! essaie encore... :-( one more time ?");
}


if ($chemin === false)
{ // Aucun essai de chemin n'a fonctionné, donc on génère une erreur 404
header("HTTP/1.0 404 Not Found");
$page404 = <<<EOF
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /{$_GET['path']} was not found on this server.<P>
</BODY></HTML>
EOF;
die($page404);
}

/* ** Si on en arrive là, il ne nous reste plus qu'à afficher la page ** */

// envoyer le type MIME du fichier au navigateur
header("Content-Type: " . mime_content_type($chemin));
// puis lui balancer direct le fichier demandé
if (getimagesize($chemin) === false)
include($chemin); // ce n'est pas une image, essayer d'interpréter la page
else
readfile($chemin); // c'est une image, l'envoyer directement en brut.


/* *************************************** */


/**
* Cette fonction essaye les diverses variantes de casse
* (majuscules/minuscules) sur le chemin d'accès
*
* _AT_param string $chemin Chemin du fichier à récupérer.
* _AT_return string|bool Le chemin avec la casse qui fonctionne
* ou false si aucun n'a été trouvé.
*/
function try_filepath($chemin)
{
if (file_exists($chemin)) // test tel quel
return $chemin;

$chemin = strtolower($chemin);
if (file_exists($chemin)) // test tout en minuscules
return $chemin; // min.min

$chemin = strtoupper($chemin);
if (file_exists($chemin)) // test tout en majuscules
return $chemin; // MAJ.MAJ

$dir = dirname($chemin) . "/";
$ext = substr( $chemin , strrpos($chemin,".") );
$base = basename($chemin,$ext);

$chemin = $dir.strtolower($base).strtoupper($ext);
if (file_exists($chemin)) // test nom en min et extension en MAJ
return $chemin; // min.MAJ

$chemin = $dir.strtoupper($base).strtolower($ext);
if (file_exists($chemin)) // test nom en MAJ et extension en min
return $chemin; // MAJ.min

// Bon là on n'a tout testé, y'a plus rien à faire.
return false;
}

?>

Lien vers le commentaire
Partager sur d’autres sites

Qu'est ce que tu entends par "échec" ?

Tu as une erreur 500 ?

Ou alors ça ne donne pas le résultat escompté ?

Quand on a un pb on faut découper pour le cerner, donc là il faut savoir si ça vient de l'UR ou de ton PHP.

Pour cela, fait une simple PHP qui récupère le path et qui l'affiche.

Comme cela tu sauras si ton UR est bon ou pas.

Ton script ne m'a pas l'air bien sécurisé.

Un 'include ($variable)', c'est *le* truc à éviter (ou alors il faut avoir une liste des urls autorisées à être "includées").

Lien vers le commentaire
Partager sur d’autres sites

Qu'est ce que tu entends par "échec" ?

Tu as une erreur 500 ?

Ou alors ça ne donne pas le résultat escompté ?

Quand on a un pb on faut découper pour le cerner, donc là il faut savoir si ça vient de l'UR ou de ton PHP.

Pour cela, fait une simple PHP qui récupère le path et qui l'affiche.

Comme cela tu sauras si ton UR est bon ou pas.

Ton script ne m'a pas l'air bien sécurisé.

Un 'include ($variable)', c'est *le* truc à éviter (ou alors il faut avoir une liste des urls autorisées à être "includées").

Bonjour à tous,

bonjour Remi: merci pour ton aide,

oui, une erreur 500

Pour cela, fait une simple PHP qui récupère le path et qui l'affiche.

Comme cela tu sauras si ton UR est bon ou pas.

? impossible :sick: je ne comprend pas ce que tu dis ( niveau 0 en dev )...

Ton script ne m'a pas l'air bien sécurisé.
En fait, j'utilise un script réalisé par un ancien Webmaster sans comprendre ou modifier celui-ci

Mais je suis TRES interessé par ce que tu dis et par une alternative éventuelle

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Si tu as une erreur 500 c'est probablement que l'UR boucle sur elle-même et dans ce cas c'est la ligne condition qui ne va pas :

Essaie avec :

RewriteCond %{REQUEST_URI} !fichier\.php$

ou encore

RewriteCond %{REQUEST_URI} !^/dossier/fichier\.php

Bon et si ton fichier s'appelle index.php, c'est encore une autre chanson...

Sinon, sur le script, on le voit qu'il est effectivement ancien. En matière de sécurité, il faut éviter de reprendre des choses trop anciennes car les techniques de contournement évoluent hélas rapidement. Ici, les contrôles opérés sont loin d'être suffisants.

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