Bonjour,
Voila je rencontre un petit problème avec mon code ou mon serveur ?!
J'ai suivi le tutoriel site web de a-z en 7 jours (je sais qu 'il est déprécié mais pour les base je me suis dit que ca pouvait être intéressant) .
Et du coup je rencontre un problème , en effet lorsque je suis en local tout fonctionne bien, mais dès que je passe en ligne mon url rewriting ne fonctionne plus.
J'ai suivi la solution de @betaWeb sur le topic https://www.grafikart.fr/forum/topics/16384 , et du coup le rewriting se fait bien mais je suis constamment redirigé vers ma vue index(acceuil du site) avec le nouvel url .....
Sur ton site en ligne, essayes d'utiliser
define('DNS', 'http://' . $_SERVER['SERVER_NAME']);
au lieu de
define('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME'])));
en remplaçant 'BASE_URL' par 'DNS'.
Il me semble avoir eu le même soucis que toi, et l'avoir résolu de cette façon.
du type, je clique sur le lien : "ma-page-1" et au lieu d'arriver sur la page en question , je rechage la meme page avec l'url www.monsite.fr/ma-page-1"
une partie de ma page index
define('WEBROOT', dirname(__FILE__)); //WEBROOT constante :chemin du dossier contenant __FILE__ (ici index.php)
define('ROOT', dirname(WEBROOT)); //ROOT constante chemin du dossier contenant WEBROOT
define('DS', DIRECTORY_SEPARATOR); //renomme la fonction DIRECTORY_SEPARATOR de php en DS
define('CORE', ROOT.DS.'core'); // chemin du core
define('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME'])));//chemin de la racine du site
define('DNS', 'http://' . $_SERVER['SERVER_NAME']);
Mon router (il s'agit de la source grafikart, j'ai seulement modifier les dernières lignes ou j'ai remplacé BASE_URL par DNS)
<?php
class Router{
static $routes = array();
static $prefixes = array();
/**
* Ajoute un prefix au Routing
**/
static function prefix($url,$prefix){
self::$prefixes[$url] = $prefix;
}
/**
* Permet de parser une url
* @param $url Url à parser
* @return tableau contenant les paramètres
**/
static function parse($url,$request){
$url = trim($url,'/');
if(empty($url)){
$url = Router::$routes[0]['url'];
}else{
$match = false;
foreach(Router::$routes as $v){
if(!$match && preg_match($v['redirreg'],$url,$match)){
$url = $v['origin'];
foreach($match as $k=>$v){
$url = str_replace(':'.$k.':',$v,$url);
}
$match = true;
}
}
}
$params = explode('/',$url);
if(in_array($params[0],array_keys(self::$prefixes))){
$request->prefix = self::$prefixes[$params[0]];
array_shift($params);
}
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index';
foreach(self::$prefixes as $k=>$v){
if(strpos($request->action,$v.'_') === 0){
$request->prefix = $v;
$request->action = str_replace($v.'_','',$request->action);
}
}
$request->params = array_slice($params,2);
return true;
}
/**
* Permet de connecter une url à une action particulière
**/
static function connect($redir,$url){
$r = array();
$r['params'] = array();
$r['url'] = $url;
$r['originreg'] = preg_replace('/([a-z0-9]+):([^\/]+)/','${1}:(?P<${1}>${2})',$url);
$r['originreg'] = str_replace('/*','(?P<args>/?.*)',$r['originreg']);
$r['originreg'] = '/^'.str_replace('/','\/',$r['originreg']).'$/';
// MODIF
$r['origin'] = preg_replace('/([a-z0-9]+):([^\/]+)/',':${1}:',$url);
$r['origin'] = str_replace('/*',':args:',$r['origin']);
$params = explode('/',$url);
foreach($params as $k=>$v){
if(strpos($v,':')){
$p = explode(':',$v);
$r['params'][$p[0]] = $p[1];
}
}
$r['redirreg'] = $redir;
$r['redirreg'] = str_replace('/*','(?P<args>/?.*)',$r['redirreg']);
foreach($r['params'] as $k=>$v){
$r['redirreg'] = str_replace(":$k","(?P<$k>$v)",$r['redirreg']);
}
$r['redirreg'] = '/^'.str_replace('/','\/',$r['redirreg']).'$/';
$r['redir'] = preg_replace('/:([a-z0-9]+)/',':${1}:',$redir);
$r['redir'] = str_replace('/*',':args:',$r['redir']);
self::$routes[] = $r;
}
/**
* Permet de générer une url à partir d'une url originale
* controller/action(/:param/:param/:param...)
**/
static function url($url = ''){
trim($url,'/');
foreach(self::$routes as $v){
if(preg_match($v['originreg'],$url,$match)){
$url = $v['redir'];
foreach($match as $k=>$w){
$url = str_replace(":$k:",$w,$url);
}
}
}
foreach(self::$prefixes as $k=>$v){
if(strpos($url,$v) === 0){
$url = str_replace($v,$k,$url);
}
}
return DNS.'/'.$url;
}
static function webroot($url){
trim($url,'/');
return DNS.'/'.$url;
}
}
Pour info je suis sur un serveur mutualisé OVH (si jamais ca peux jouer)
Si quelqu'un à une idée svp