2009-12-21 5 views
2

seulement en théorie: Presque tous les sites Web modernes fonctionnent de cette manière:Quelles alternatives ai-je pour développer une navigation sur un site sans .htaccess?

somedomain.com/layer1/layer2/action 

Par exemple:

http://stackoverflow.com/questions/ask 

Typiquement, cela se fait avec .htaccess et ModRewrite Engine. Il y a quelque temps, je suis tombé sur un article qui décrivait quelque chose qui venait tout droit de PHP. Je ne me souviens plus du nom. Ce morceau de code PHP était conscient de l'URL actuellement ouverte. Il était capable de dire quel domaine est appelé, quel TLD est appelé, quel est le premier répertoire, quel est le second répertoire, quel est le fichier appelé, etc.

Je sais que Kohana Framework utilise cette technologie, mais je ne sais pas où regarder. Quelqu'un connaît-il cela?

Répondre

3

Ce que vous voulez dire, c'est utiliser la variable d'environnement PATH_INFO. Voir par ex. here

Sans accès aux paramètres .htaccess, vous avez cependant toujours un filename.php dans le chemin avec cette méthode:

www.domain.com/filename.php/questions/ask/ 
+0

intéressant. Oh oui, je me souviens maintenant de mes vieux jours Kohana, que j'ai dû mettre en place une réécriture dans .htaccess pour ce problème www.domain.com/filename.php/. Cela va être la question suivante :-) – openfrog

+0

umm ... donc vous voulez utiliser mod_rewrite pour résoudre un problème que vous avez créé en n'utilisant pas mod_rewrite? Ou ai-je totalement mal compris ce que vous avez dit? –

+0

oui, un peu de;) ... eh bien, il est logique de gérer cela par programme. Imaginez un cadre qui vous permet de créer des couches de navigation. C'est ce que j'essaie de faire. Je pense que c'est mieux fait en PHP que de jouer avec .htaccess. Je ne sais même pas si PHP peut lire/écrire .htaccess.Bien sûr, cela pourrait aussi être une solution, bien que j'aime l'idée de le faire avec PHP. – openfrog

3

Ce qui se passe sous la surface de .htaccess dans la plupart des cas est ce que vous êtes à la recherche de. Dans de nombreux cas, le fichier .htaccess délègue simplement la tâche à un fichier index.php, qui est lui-même préparé pour gérer les valeurs transmises en représentant un contrôleur, une méthode et des paramètres.

Je ne vois pas pourquoi vous ne pourriez pas simplement créer votre propre fichier .php pour analyser l'URL et gérer les valeurs à partir de là. Vous aurez simplement devez utiliser ce fichier .php comme base dans toutes les urls si:

www.mysite.com/index.php/controller/method/parameter1/parameter2 
1

Vous pouvez jouer avec le document d'erreur de apache, mais il est juste un hack (comme la réécriture aussi) et non un nettoyage Solution.

+0

Pour être plus précis: Écrivez dans votre fichier .htaccess 'ErrorDocument 404/index.php' (en supposant que vous êtes dans la racine du document). Cela redirige toutes les erreurs 404 vers votre index.php. – Boldewyn

+0

Pour quoi faire -1? Je voulais donner exactement le même anser! – Boldewyn

+0

Je n'ai pas -1, mais cela ne veut-il pas dire que vous allez renvoyer le statut d'erreur 404 à tout le monde? N'est-ce pas une mauvaise idée? –

1

Vous pouvez utiliser une combinaison d'en-têtes HTTP, mais ceux-ci peuvent ne pas être fiables sur certains serveurs Web. Pour voir ce que les en-têtes HTTP sont disponibles sur votre serveur, faire une page avec juste ceci:

<?php phpinfo(); ?> 

Rechercher la section Variables PHP, plus précisément ce sont ceux que vous pouvez utiliser potentiellement:

_SERVER["HTTP_HOST"] 
_SERVER["SCRIPT_NAME"] 
1

Jetez un oeil à la Front controller pattern. Essentiellement, vous obtenez toutes vos demandes d'être redirigé vers un seul fichier PHP qui décode l'URL et décide de l'action suivante.

Ce n'est pas spécifique à PHP.

Questions connexes