Bonjour à tous dans le but de faire des urls plutôt propres je me suis dis que j'allais les réécrires avec un .htaccess en local tout fonctionne car le MVC ne tient pas compte du fait que le fichier n'existe pas lorsque je fais un répertoire virtuel. Sauf qu'en ligne l'url est lue comme si c'était vraiment un fichier donc forcément la fonction loadcontroller ne trouve pas de fichier et affiche une page 404 donc le comportement est normal en soi.
Mais j'aimerai avoir une url du style:
http://www.monsite.com/truc-qui-existe-pas/machin-inexistant par exemple en sachant que je fais passer des variables GET en plus, et le réécrire sous la forme http://www.monsite.com/truc-qui-existe/machin-existant?GET... donc comme dis ci-dessus en local aucun soucis, l'arborescence est tout de même moins strict ce qui n'est pas le cas en ligne.
J'ai usé de toute les techniques que j'ai trouvé sur le net (link:canonical,balise base,Options Multiviews etc...) aucune n'a fonctionné toujours pris en compte comme un fichier existant donc erreur 404.
La seule solution que j'ai trouvé pour le moment c'est de voir la condition d'existence du fichier si dans le .htaccess je n'ai pas une réécriture qui dis que pour le controller et l'action en cours je réécris en un controller et l'action souhaité.
Si c'est le cas j'appelle les fichiers correspondants.
Mais j'aimerai savoir si quelqu'un a une solution plus pratique que celle-ci puisque c'est assez chiant de devoir charger dans le fichier .htaccess des informations de ce genre.
Merci d'avance.
tu doit avoir un pb a ce niveau [code]$_SERVER['PATH_INFO']/code] de ton objet request … Debug ton $_SERVER pour voir quelle valeur correspond le plus a cela (en local tu là mais sur le serveur c'est pas la même config)
Je ne pense pas que ce soit ça justement j'ai modifié le REQUEST parce qu'en ligne il ne fonctionnait pas à la base:
if( !isset($_SERVER'PATH_INFO']) ){
$_SERVER'PATH_INFO'] = str_replace('', '/', $_SERVER'SCRIPT_URL']) ;
}
$this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';
Voilà une partie du Request en sachant qu'en ligne il va toujours dans la boucle "si non définie" ce que je trouves d'ailleurs assez étrange.
Je doute que faire un debug en ligne soit une bonne chose pour le référencement mais si c'est nécéssaire je le ferai.
Edit: J'ai fait un print_r de $_SEVER étant donné que le debug ne fonctionne pas sur $_SERVER en ligne pour une raison qui m'est inconnu résultat je récupère bien les variables GET sans le QSA mais l'url de redirection n'est pas réécrite alors qu'en local si.
En effet au lieu de transformer machin qui n'existe pas en machin qui existe, la redirection se fait sur machin qui n'existe pas d'où la page 404.
En local la redirection se fait niquel, $_SERVER'REDIRECT_URL'] correspond bien à la réécriture du .htaccess.
Oui, a tu
$_SERVER'PATH_INFO']
dans ton
print_r($_SERVER);
? car souvent sur les serveurs web non local cela change un peut.
moi de :
$_SERVER'PATH_INFO']
il a falut le passer en
$_SERVER'ORI_PATH_INFO']