Bonjour,

Voila je rencontre un petit problème avec mon code.

Voici comment les URLs sont appelés à l'heure actuel sur mon appli : index.php?page=home
Mon objectif est de pouvoir obtenir www.DOMAINE.fr/home
Et si necessaire pouvoir faire www.DOMAINE.fr/home?variable=param

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?page=$1

ERREURS

J'ai un require 'inc/bdd.php'; dans mon index.php
Bien évidement cela bloque, j'ai essayé de resoudre comme ceci :

$web_root = 'www.DOMAINE.fr/';
require $web_root.'inc/bdd.php';

Mais l'importation ne ce fait pas !

Bien Amicalement,

Merci d'avance.

5 réponses


neecride
Réponse acceptée

ça n'a rien a voir mais je te le donne quand même

ce truc la

RewriteRule (.*) index.php?page=$1

c'est bien mais tes paramettre tu dois les passer comme ça home&id=1 par exemple.

moi je ferais plutot ça RewriteRule ^([a-zA-Z\-]+)/([0-9]+)/?$ index.php?page=$1&id=$2 [NC,L] come ça tu tape ton url sans te soucier des & ? puis si tu a un slug en plus c'est la même chose RewriteRule ^([a-zA-Z\-]+)/([0-9]+)/([a-zA-Z\-]+)/?$ index.php?page=$1&id=$2&slug=$3 [NC,L] ainsi tu obtien cette url single-page/1/mon-article pour ton article single qui a l'id 1

ensuite pour ton soucis :

static function webroot(){

        $path = dirname(dirname(__FILE__));

        $directory = basename($path);
        $url = explode($directory, $_SERVER['REQUEST_URI']);
        if(count($url) == 1){
            $absolute = '/';
        }else{
            $absolute = $url[0] . $directory .'/';
        }
        return $absolute;

    }

ou ça qui revien a la même chose

define('WWW_ROOT', dirname(dirname(__FILE__)));

$directory = basename(WWW_ROOT);
$url = explode($directory, $_SERVER['REQUEST_URI']);
if(count($url) == 1){
    define('WEBROOT', '/');
}else{
    define('WEBROOT', $url[0] . $directory .'/');
}

Si ensuite si on veut pousser un peut :

static function linkRel($file, $attrs, $path = null){
        if($attrs === 'css'){
            if($path != null){
                return "<link href='".Route::webroot()."$path$file.$attrs' rel='stylesheet' type='text/css' media='screen'>";
            }
            return "<link href='".Route::webroot()."views/css/$file.$attrs' rel='stylesheet' type='text/css' media='screen'>";

        }else if($attrs === 'js'){

            if($path != null){
                return "<script src='".Route::webroot()."$path$file.$attrs'></script>";
            }
            return "<script src='".Route::webroot()."views/js/$file.$attrs'></script>";
        }else if($attrs === 'php'){
            if($path != null){
                include Route::webroot() . $path . $file . $attrs';
            }
                include Route::webroot() . 'inc/' . $file . $attrs;
        }
    }

Cela te donne ça <?= Route::linkRel('style','css'); ?> ou <?= Route::linkRel('jquery','js'); ?> ou <?= Route::linkRel('bdd','php','inc/'); ?> qui avec la constante te donnera toujours le bon fichier dans le bon dossier.

j'ai pas tester je vien de l'ecrire mais ça peut fonctionner !! en gros si ton fichier est un css il inclu un fichier css si c'est du js pareil etc... tu peut si ton fichier n'est pas dans le dossier par defaut alors tu peut en choisir un avec le troisième parametre.

On pourrait aussi ajouter une condition si il existe ou pas avec un file_exist dans ce cas on l'inclue pas ça evitera les erreurs.

Bonjour.
Tu fais fausses routes en voulant inclure des fichiers via l'url.
Il te faut plutôt par exemple définir une constante qui permettra de récupérer le chemin de la racine de ton site et d'utiliser cette constante pour pouvoir l'utiliser comme chemin de base de ton application web.

Sinon, vous devriez éviter maintenant d'utiliser le fichier .htaccess pour faire toutes vos réécritures d'url, utilisez plutôt un système de routing et si tu ne vois pas comment en faire un, tu peux tout simplement en utiliser un déjà existant, comme par exemple Slim, il y a d'ailleurs un tutoriel qu'a récemment fait Grafikart : Tutoriel Vidéo PHP » Slim Framework 3.

pulsat
Auteur

Merci Lartak,
J'ai déjà jeté un oeil sur ce tutoriel. L'urlRewriting est vraiment pour moi la solution la plus simple car c'est une appli qui ne gére de 4 ou 5 pages et c'est juste pour de l'esthétique. Ca m'ennuie de devoir encore importer une class pour si peu.

pulsat
Auteur

Le FLAG NC L : si cette régle est valide on renvoi le resultat sans tester les autres , il me semble ...?

Ta réponse est d'un grand secour, même si des intérogations s'y rajoutent; je pense qu'en analysant mieux ton code je devrais trouver mes réponses.

Merci encore la communauté !

NC c'est insencible au maj/min c'est tous, le L met fin a la requete de l'url donc LAST