Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir à tous et à toutes
Bon voilà, depuis quelques jours je tente de faire du "sous-domaines virtuels" avec Zend et à vrai dire, j'ai fait une mini avancée (rien de bien réjouissant...)
Je m'explique, je programme une petite plateforme de blog et je me retrouve coincé au niveau des URL.
Au lieu que l'utilisateur tape http://www.domaine.tld/blog/monblog (ce qui n'est pas jolie), le mieux serait http://monblog.domaine.tld.
J'avoue être complètement perdu car il faut que ça puisse aussi gérer les controllers, les actions, etc...
Dans mon virtualhost, j'ai écrit ceci :
<VirtualHost MON_IP:80>
ServerAdmin webmaster@mon_site.net
DocumentRoot /home/mon_site/www/public
SuexecUserGroup mon_user users
ServerName www.domaine.tld
ServerAlias *.domaine.tld
RewriteEngine on
RewriteCond %{http_host} .
RewriteCond %{http_host} !^www.domaine.tld [NC]
RewriteCond %{http_host} ^([^.]+)\.domaine.tld [NC]
RewriteRule ^(.*) http://www.domaine.tld/blog/%1/ [QSA,L]
<Location />
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ /index.php
</Location>
CustomLog logs/www.domaine.tld-access_log combined
ScriptAlias /cgi-bin/ /home/mon_site/cgi-bin/
AddHandler x-httpd-php5 .php
</VirtualHost>
<Directory "/home/mon_site/www/public">
Options FollowSymlinks
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
Si je tape une URL du type http://monblog.domaine.tld, je suis rediriger vers le blog concerné correctement mais mon URL change en http://www.domaine.tld/blog/monblog. Je sais que j'ai fais une simple redirection mais je ne sais plus quoi essayer pour réussir cette technique.
Votre aide serait la bienvenue
Merci
P.S. :
Si ça peut aidé, je suis sur un serveur dédié chez OVH (Kimsufi).
Et j'ai bien mis la ligne qui faut dans le fichier BIND (* IN A IP_DU_SERVEUR).
Dernière modification par logikstik (11-12-2008 09:26:37)
Hors ligne
Il faut faire un proxy avec apache
l'idée est de faire 2 virtual host :
- sur monblog.domaine.tld, tu fais un proxy qui "proxifie" tes URL vers www.domaine.tld/blog/monBlog
- sur www.domaine.tld, tu fais ta conf standard comme si l'internaute surfait sur /blog/monBlog
ton proxy, tu le fais :
- soit avec mod_rewrite et les flag [P] (cf la doc)
- soit avec mod_proxy
Par contre tous tes liens dans ton blog doivent être relatifs, sinon tu vas te balader d'un domaine à l'autre avec des erreurs de répertoire... réécrire le coeur de la page en +, c'est quasi impossible (surtout si t'as du js et du flash...). Si vraiment t'en as besoin il y a un mod_proxy_html je crois, mais ça ne marche pas sauf sur un hello world...
bon courage,
Philippe
Hors ligne
Sinon sans passer par du rewrite ou proxy, tu analyse la première partie de l'url pour détecter le nom du blog, et là tu charge tous les paramètres qui lui correspondent ...
Hors ligne
Merci à vos deux pour vos conseils et solutions mais j'ai finalement trouver plus simple. J'ai utiliser le router du controlleur frontal.
Je vous montre ma découverte
$hostnameRoute = new Zend_Controller_Router_Route_Hostname( ':user.domaine.tld', array( 'module' => 'blog', 'controller' => 'index', 'action' => 'index' ) ); $plainPathRoute = new Zend_Controller_Router_Route_Static(''); $routeur->addRoute('blog', $hostnameRoute->chain($plainPathRoute));
Maintenant je peux appeler le blog de cette façon http://monblog.domaine.tld qui sera redirigé automatiquement vers le module "blog".
Il faut aussi écrire une règle pour les "www".
Voilà ! Si jamais je trouve plus d'infos, je viendrai editer ce post pour vous en faire part !
A bientôt et merci !
Dernière modification par logikstik (10-12-2008 23:43:28)
Hors ligne
philippe !! mod_proxy pour faire ca ! quel horreur ! Ce n'est pas du tout son but !
Il existe la directive serverAlias pour ca !
http://httpd.apache.org/docs/2.0/mod/co … erveralias
Hors ligne
Bon au propre voilà ce que donne le router de mon initializer.
$router = $this->_front->getRouter(); $router->removeDefaultRoutes(); $pathRoute = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index') ); $accountRoute = new Zend_Controller_Router_Route_Hostname(':user.domaine.tld', array('module' => 'blog'), array('user' => '([a-z0-9]+)') ); $router->addRoute('blog', $accountRoute->chain($pathRoute)); $adminRoute = new Zend_Controller_Router_Route_Hostname('admin.domaine.tld', array('module' => 'admin') ); $router->addRoute('admin', $adminRoute->chain($pathRoute)); $defaultRoute = new Zend_Controller_Router_Route_Hostname('www.domaine.tld', array('module' => 'default') ); $router->addRoute('default', $defaultRoute->chain($pathRoute));
Du coup je peux gérer des sous-domaine virtuels sans htaccess, simple et pratique. Merci Zend
Hors ligne
@nORKy : ben non, les paths des URLs changent aussi. Sauf si j'ai pas bien compris le problème, on veut surfer sur http://monblog.domaine.tld/ à la racine alors que le site est sur http://www.domaine.tld/blog/monBlog (donc pas à la racine, dans /blog/monBlog). Le path n'est pas le même sur les 2 applis => avec serveurAlias on l'a dans l'os.
A+, Philippe
Hors ligne
En fait, je me rend compte que c'est moi qui n'avait pas compris son problème
[mode hors-sujet]
n'empêche que pour arrivé à utiliser mod_proxy en local, il faut le vouloir.
Moi, j'utilise mod_proxy pour exposé une partie d'un serveur web d'un LAN sur un réseau public par le biais d'un serveur public
machine client --- INTERNET -----
----> machine public (mod_proxy) ---- nuage --- LAN ---
----> machine prive (accès normalement qu'en local)
On s'en sert par exemple pour un service de surveillance de nos lignes Télécom. On a affichage de tous l'état de tous nos lignes (ce compte par milliers). Cela est gérer par un serveur sur notre réseau. Mais pour certains client qui veulent aussi voir l'état de leur ligne (latence, consommation, ...) avec un
serveur public, je fais proxy vers ce serveur pour autoriser à certains client a voir leur lignes
[/hors-sujet]
Hors ligne
Pages: 1