Bonjour,

tout d'abord merci Grafikart, vraiment, car j'ai passé quelques jours à suivre le tuto sur le pattern MVC et j'ai appris énormément de choses.

Je me suis retrouvé dernièrement coincé lors du déploiement de mon appli sur un serveur mutualisé 1an1... au niveau du .htaccess (comme pas mal de monde avant moi apparemment). Je suis pourtant devant un soucis que je ne comprends pas vraiment.

Pour planter le décor, l'appli en question est gentiment rangée dans un répertoire /vitrine, à la racine du serveur. Mes .htaccess ressemblent donc à ça :

// à la racine du site
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule (.*) vitrine/webroot/$1 [L]
// dans le /webroot
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) vitrine/webroot/index.php/$1 [L]

Ma Homepage s'affiche sans soucis mais voilà, aucun controller ne semble être pris en compte, je suis constamment redirigé sur la Homepage.

Par exemple : un lien du type Router::url('galleries/') pointant bien vers /vitrine/galleries/ et affichant l'url http://monsite.fr/vitrine/galleries/ me rend la Homepage !

Je suis penché sur le problème depuis plusieurs heures et j'en perd mon latin. Vous auriez une idée ?

15 réponses


iPekka
Auteur
Réponse acceptée

Sur la base de ce que tu as fait j'ai tenté ça

if( !isset($_SERVER'PATH_INFO']) ){
    $_SERVER'PATH_INFO'] = str_replace('vitrine/', '', $_SERVER'SCRIPT_URL']) ;
}

C'est pas super propre c'est le moins qu'on puisse dire, mais ça a le mérite de fonctionner... Merci !

(si autre solution est possible n'hésitez à me le faire savoir surtout !)

Salut, essaies d'ajouter a ta règle le "index.php"

RewriteEngine on
RewriteBase /
RewriteRule (.*) vitrine/webroot/index.php/$1 [L]
iPekka
Auteur

Salut, Reda. Nan ça ne marche pas. Aucun changement... plus j'y réfléchis plus je me dis que ça ne vient pas des .htaccess mais de Router.php

Au fait, je précise que tout fonctionne bien en local via MAMP ;)

si tu mets ce code a la fin de ton fichier index.php, ça donne quoi?

<?php print_r($_SERVER); ?>
iPekka
Auteur

...tout semble aller bien

[REDIRECT_REDIRECT_SCRIPT_URL] => /vitrine/
[REDIRECT_REDIRECT_SCRIPT_URI] => http://www.monsite.fr/vitrine/
[REDIRECT_REDIRECT_DOCUMENT_ROOT] => /kunden/homepages/20/xxxxx/htdocs 
[REDIRECT_REDIRECT_STATUS] => 200 
[REDIRECT_SCRIPT_URL] => /vitrine/ 
[REDIRECT_SCRIPT_URI] => http://www.monsite.fr/vitrine/ 
[REDIRECT_DOCUMENT_ROOT] => /kunden/homepages/20/xxxxx/htdocs 
[REDIRECT_HANDLER] => x-mapp-php5 
[REDIRECT_STATUS] => 200 
[DBENTRY_HOST] => monsite.fr 
[DBENTRY] => /kunden/homepages/20/xxxxx/htdocs:d0000#CPU 6 #MEM 10240 #CGI 346 #NPROC 12 #TAID 61532222 #WERB 0 #LANG 2 #STAT 1 
[SCRIPT_URL] => /vitrine/ 
[SCRIPT_URI] => http://www.monsite.fr/vitrine/ 
[HTTP_HOST] => www.monsite.fr 
[HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14 
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
[HTTP_ACCEPT_ENCODING] => gzip, deflate 
[HTTP_ACCEPT_LANGUAGE] => fr-fr 
[HTTP_DNT] => 1 
[HTTP_COOKIE] => PHPSESSID=556acd7656936bb96584850d38d4acea 
[HTTP_CONNECTION] => keep-alive 
[PATH] => /bin:/usr/bin 
[SERVER_SIGNATURE] => 
[SERVER_SOFTWARE] => Apache 
[SERVER_NAME] => monsite.fr 
[SERVER_ADDR] => 82.165.xxx.xx 
SERVER_PORT] => 80 [REMOTE_ADDR] => 85.95.xxx.xxx 
[DOCUMENT_ROOT] => /kunden/homepages/20/xxxxx/htdocs 
[SERVER_ADMIN] => webmaster@monsite.fr 
[SCRIPT_FILENAME] => /kunden/homepages/20/xxxxxx/htdocs/vitrine/webroot/index.php 
[REMOTE_PORT] => 56834 
[REDIRECT_URL] => /vitrine/webroot/index.php 
[GATEWAY_INTERFACE] => CGI/1.1

ajoute par exemple a ton url le controller, l'action et les paramètres.
ça donne quoi ?!
P.S : exécuter le script a ton serveur et non pas en local.

iPekka
Auteur

Oui oui, j'exécute bien sur le serveur ;)

J'avais déjà tenté de forcer par l'url, ça me ramène sur la Homepage. Par contre j'ai fait un debug dans le dispatcher et je viens de me rendre compte que $this->request->data->url est systèmatiquement égale à "/" , c'est donc bien ma fonction parse du Routeur qui fait des siennes... on avance !

je crois qu'il ne trouver pas le $_SERVER'PATH_INFO'] c'est pour ça il rend l'url a /

iPekka
Auteur

Effectivement, si je le debug, il me sort rien...

iPekka
Auteur

Hmm oui je vois ce que tu veux faire. Mais là SCRIPT_NAME et PHP_SELF sont identiques donc PATH_INFO = "" :p

iPekka
Auteur

autrement dit, PHP_SELF n'a pas implémenté le controller et l'action...

Bonjour j'avais le meme problème .
enfet dans ton class request tu doit changer le 'PATH_INFO'] par 'ORIG_PATH_INFO'] .
bonne chance !

iPekka
Auteur

Salut ilyess2002
ça fonctionne impeccable pour les controller ! En revanche, cette fois ça coince c'est en cas d'absence de controller.

Normalement direction la Homepage, mais là 'ORIG_PATH_INFO'] a comme valeur '/vitrine/webroot/index.php' , au lieu de '/'...

Bonjour,
j'ai le même problème. Est ce que quelqu'un à trouver une meilleure solution ?
Merci

Bonjour à tous,
Je ne sais pas si vous avez résolu vos problèmes avec 1and1, mais je suis dans la même situation.
J'ai suivi les 5 premiers tutos, mais un seul me pose problème, celui du "Routing".
En effet, sur 1and1, lorsque je tente cette règle : Router::connect('/', 'posts/index'); toutes mes posts me redirigent vers le domaine principal. Les "pages" elles fonctionnent correctement (c'est à dire que j'y accède bien). Le domaine redirige bien sur l'index de tous mes posts.
Si je fais ça Router::connect('', 'posts/index'); dans ce cas, tous les liens fonctionnent normalement, mais le domaine me sort une erreur car il essaie de charger le controller webroot " ...]controller/WebrootController.php [function.require]: failed to open stream: No such file or directory in ...]" qui n'existe pas du coup.
J'ai uploadé les sources pour voir si ce n'était pas moi qui avait mal suivi les tutos, mais rien n'y fait. Ca ne redirige pas!

Auriez-vous une piste, ou quelque chose que je pourrai vérifier pour que tout fonctionne?
Merci pour votre aide.