Bonjour/bonsoir,

J'ai un problème vraiment bizarre, je travail avec un système de redirection pour mon framework perso (basé sur le modèle du tuto de Grafikart, avec mes petits changements).

J'ai créer ce système de redirection. Si je place tout mon projet dans un dossier
(par exemple: /framework/iciMonProjetAvecLesFichiersEtAutres)
Alors les redirections marche nickel, par contre du moment ou je place mon projet à la racine les redirections ne marche plus.

Le plus bizarre, les redirections marche parfaitement en local (que mon projet soit à la racine ou dans un dossier), par contre sur mon serveur, le projet ne marche que s'il est placé dans un dossier.

Voici le .htaccess placé à la racine du projet

Options -Indexes
RewriteEngine On
# Redirige vers les ressources du dossier "public", "admin" ou "dev"
RewriteCond %{REQUEST_URI} ^([a-zA-Z0-9.-_]+/)*(public|admin|dev)/(js|img|css)/(.+\..+)$
RewriteRule (.*) app/%2/WEBROOT/%3/%4 [L]
# Redirige vers les ressources du dossier "sources"
RewriteCond %{REQUEST_URI} ^([a-zA-Z0-9.-_]+/)*sources/(.+\..+)$
RewriteRule (.*) app/sources/%2 [L]
# Si le fichier n'éxiste pas on redirige sur le Framework
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) core/index.php/$1 [L]
# Si l'url contient ".php" on redirige sur le Framework (Que le fichier éxiste ou non)
RewriteRule (.*\.php) core/index.php/$1 [L]

Voici la structure du projet depuis sa racine :

| .htaccess
|   
+---app
| |   
| +---admin
| | | layout.php
| | |       
| | +---unController
| | | unControllerController.php
| | | vue1.php
| | | vue2.php
| | |       
| | +---WEBROOT
| | | +---css
| | | | | style.css
| | | | |   
| | | | \---img
| | | | background.png
| | | |           
| | | +---img
| | | | icon.ico
| | | | logo.png
| | | |       
| | | \---js
| | | | main.js
| |           
| +---dev
| | | PAREILS QUE DANS le dossier app/admin
| |           
| +---public
| | | PAREILS QUE DANS le dossier app/admin
| |     
| \---sources
| +---img
| | image.png
| |
| +---js
| | \---jquery
| | jquery-1.8.0.js
| | jquery-1.8.0.min.js
| | jquery.easing.js
| | jquery.easing.min.js
| | jquery.masonry.js
| | jquery.masonry.min.js
| |           
| \---uploads
| | un-fichier-uploader.png
\---core
    | .htaccess
    | includes.php
    | index.php
    |   
    +---Config
    | Config.php
    | Redirections.php
    |       
    +---Helpers
    | Form.php
    | Functions.php
    | Session.php
    | SqlRequest.php
    |       
    +---MVC
    | Controller.php
    | Modele.php
    |       
    \---Routing
            Dispatcher.php
            Request.php
            Router.php

3 réponses


Typhon
Auteur
Réponse acceptée

Personne n'a d'idée ?

EDIT : Problème finalement résolus par moi même ;)

Vérifie dans le router que l'url est bien écrite en commençant par /

Typhon
Auteur

J'ai oublié de préciser que l'erreur n'était pas un problème de redirections au niveau des urls, mais au niveau du serveur

"500 Internal Server Error"

Mais pour info voilà la fonction url() de la class Router

/**
    * Permet de construire un Url au bon format
    * @param $url : Url à formater
    * @return L'Url formaté
    **/
    public static function url($url ='', $full = false) {
        $url = trim($url, '/');
        foreach(self::$routes as $route) {
            if(preg_match($route'originalReg'], $url, $match)) {
                $url = $route'redirection'];
                foreach($match as $key=>$value) {
                    $url = str_replace(":$key:", $value,$url);
                }
            }
        }
        foreach(self::$prefixes as $key=>$value) {
            if(strpos($url, $value) === 0) {
                $url = str_replace($value, $key, $url);
            }
        }
        if($full) {
            return FULL_URL.'/'.$url; 
        }
        else {
            return BASE_URL.'/'.$url; 
        }

    }

J'ai fais un var_dump() des deux possibilités de retour (L'url full (absolu) et l'autre en relatif) et voilà les résultats

El local :
string 'localhost/framework' (length=19)
string '/framework' (length=10)

En ligne :
string 'by-typhon.net/framework' (length=23)
string '/framework' (length=10)

On voit donc que le framework se trouve dans le dossier /framework de mon site, et l'url à rentrer pour y accéder est donc 'by-typhon.net/framework'.

Ce que je veux c'est pouvoir placer le contenu du dossier /framework à la racine du site (et donc rentrer l'url by-typhon.net et tomber directement sur le framework), or dès que je fais ceci j'ai l'erreur "500 Internal Server Error" (sans avoir modifier mon .htaccess).