Comment une URL comme http: travail //localhost/index.php/articles/edit/1/my-first-article sans .htaccess?
Question
Je ne comprends pas:
http: //localhost/index.php/articles/edit / 1 / my-first-article
Cette URL est mentionné comme un exemple dans le documentation cadre Kohana . J'ai poussé autour dans les fichiers de mon installation, et il n'y a pas .htaccess d'ailleurs ma propre qui n'a rien à voir avec cela.
Alors, comment peut-il être qu'une index.php est appelée mais, en tant que paramètres, les choses ressemble à des répertoires ajoutés à l'URL? Cela ne regarde pas « vrai ».
Ou est-ce juste comment les choses natif PHP / Apache / HTTP fonctionne réellement? Si je comprends bien, / est toujours dire « hey, un répertoire! ». Donne-moi vraiment zéro sens ... comment est-ce possible? Ou ont-ils quelque part un .htaccess que je ne peux pas voir / trouver?
La solution
En PHP, vous pouvez obtenir les données après le nom du fichier avec le $_SERVER["PATH_INFO"]
variable. Cela vous permet d'obtenir essentiellement des informations sans avoir à utiliser des variables GET, ce qui signifie que Google et co pensera que vous utilisez des pages statiques. Ceci est essentiellement une alternative à mod_rewrite
qui est souvent activée alors que mod_rewrite
est le plus souvent pas activé.
Cela vous est peut-être évident, mais il n'a pas été immédiatement pour moi, cela ne fonctionne pas correctement sur les pages d'index, sauf si vous utilisez le nom du fichier. Par exemple, http://example.com/test/my/get/params
ne fonctionnera pas, alors que la volonté de http://example.com/test/index.php/my/get/params
.
Autres conseils
De la Apache docs :
AcceptPathInfo directive
Cette directive détermine si les requêtes qui contiennent de fuite l'information qui suit un chemin nom réel du fichier (ou fichier inexistant dans un répertoire existant) sera acceptée ou rejetée. la fuite informations chemin peut être fait disponible pour les scripts dans le PATH_INFO variable d'environnement.
Par exemple, supposons que l'emplacement / test / pointe à un répertoire ne contient que le seul fichier here.html. demande ensuite pour /test/here.html/more et /test/nothere.html/more deux collectionnez / Plus que PATH_INFO.
Je suppose que ce paramètre est activé quelque part comme dans httpd.conf. Notez que cela, comme mod_rewrite, peut être activé / configuré dans un certain nombre d'endroits - voir ici .
AcceptPathInfo est activée pour votre serveur. :)
Je ne suis pas à l'aide Kohana, donc je ne sais pas si ma méthode sera de toute utilisation, mais lorsqu'un serveur ne prend pas en charge les fichiers .htaccess (ou réécrire les règles) mon « cadre » génère des URI comme ceci:
http://www.domain.com/? / articles / modifier / 1 / my-first-article (notez le?)
Il est une méthode similaire à celle utilisée par le framework Frog, analyser juste $_SERVER['REQUEST_URI']
(ou $_SERVER['HTTP-X-REWRITE-URL']
sur les serveurs Windows) et exploser sur le « / ».
Cette méthode est complètement récrire URI indépendant et génère encore plus ou moins SEO amical
Espérons que c'est d'aucune utilité pour vous.
Probablement pas le cas ici, et certainement pas recommandé, et probablement pas la bonne réponse ...
...
J'ai vu des gens utiliser 404 pages pour analyser la demande et comprennent la bonne page avec cette information.
Voir PATH_INFO Variables d'environnement CGI .