Hello à tous,
Je viens vous demander de l'aide sur un problème qui me resiste depuis quelques heures et je deviens fou^^

Pour un projet, j'essaie de générer des sous domaines dynamique pour les membres à savoir :
url de base http://mon-site.com/users/viewprofil/shinix
qui donnerai : http://shinix.mon-site.com

du coup j'arrive maintenant à afficher "http://shinix.mon-site.com" mais il me dit qu'il ne trouve pas "The requested URL /webroot/users/viewprofil/ was not found on this server."

jai modifié comme ceci le .htaccess situé dans "webroot/.htaccess"

<IfModule mod_rewrite.c>
    RewriteEngine On   
    RewriteCond %{HTTP_HOST} !^www\.mon-site\.com$ [NC]
    RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+)\.mon-site\.com$ [NC]
    RewriteRule ^users/ - [L]
    RewriteRule ^(.*[^/]) users/viewprofil/%1 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Avez-vous une idée ?
Merci d'avance !

7 réponses


Grafikart
Réponse acceptée

Mmmh le mieux serait d'envoyer les gens vers un fichier php unique (index.php) et de gérer le routing depuis ce fichier. Pour avoir une gestion plus fine qu'avec un .htaccess

shinix
Auteur
Réponse acceptée

Hello Grafikart, Merci pour ta réponse.

Effectivement j'ai laissé tombé peu après avoir posté mon message l'idée du .htaccess mais utilisé directement le routing.

Si quelqu'un a le même soucis un jour :

//Récupérer le sous-domaine:
$sous_domaine = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
//condition
if($sous_domaine != 'www' && $sous_domaine !='nomdusite') {
    $request = explode('/',$_SERVER['REQUEST_URI']);
    if(!empty($request[1])) {
            $action = $request[1];
            if(isset($request[2])) {
                $sous_domaine.="/".$request[2];
            }
            if(isset($request[3])) {
                $sous_domaine.="/".$request[3];
            }
            if(isset($request[4])) {
                $sous_domaine.="/".$request[4];
            }
        } elseif(isset($request[2]) && !empty($request[2])) {
            $action = $request[2];
            if(isset($request[3])) {
                $sous_domaine.="/".$request[3];
            }
            if(isset($request[4])) {
                $sous_domaine.="/".$request[4];
            }
        } else {
            $action = 'index';
        }
        $_SERVER['REQUEST_URI'] = "users/".$action."/".$sous_domaine;

}

Le code est un peu barbare, mais redéfini la variable $_server en fonction du sous domaine et de la page du sous domaine (action).

Merci pour votre aide :)

Merci d'avoir partagé ton code ca pourra aider :)

Juste une petite remarque en passant.
Pourquoi laisser seulement la possibilité de mettre 4 parametres dans ta request ? Une boucle n'aurit pas été plus apropriée ?

shinix
Auteur

Oui arnich j'aurais pu le faire en boucle, mais c'est pour le module users et il n'a que 4 paramètres au maxium donc il était tard et.. je me suis pas fait chier ^^

Ok.
Maintenant a cette heure a mon avis il est temps de faire un petit refactoring pour améliorer ce code :)

shinix
Auteur

Ah ça ! c'est exactement ce que je suis entrain de faire =)