2009-11-12 2 views
1

J'ai créé ma propre structure php personnalisée qui implémente le motif de conception MVC. Dans ce document, toutes les URL sont construites comme celui-ciRéécriture d'URL dans PHP MVC Framework

 
mysite.com/index.php?route=controller/function/parameters/go/here 
mysite.com/index.php?route=products/shirts/99 

etc

J'ai mis en place htaccess pour enlever index.php? Route = partie des URL pour les rendre plus SEF les faisant apparaître comme celui-ci :

 
mysite.com/controller/function/parameters/go/here 
mysite.com/products/shirts/99 

Je veux juste ajouter un suffixe à la fin de chaque URL comme ceci:

 
mysite.com/controller/function/parameters/go/here.html 
mysite.com/products/shirts/99.html 

Probablement htaccess peut être utilisé pour y parvenir ou éventuellement d'autres solutions.

Des idées s'il vous plaît?

Merci d'avance.

+0

Je ne comprends pas pourquoi vous voulez ajouter un suffixe '.html' aux pages qui ne sont pas du HTML pur. Ce n'est pas un avantage pour le référencement ou les utilisateurs - en fait, il est probablement pire parce que c'est inutile fluff. – DisgruntledGoat

+0

Vous avez raison, mais certains utilisateurs m'ont demandé d'ajouter cette fonctionnalité dans le framework, c'est pourquoi je suis à la recherche d'une solution à ce problème. – Sarfraz

+0

Si vous demandez comment ajouter le fichier .html aux liens générés par votre framework (au lieu d'une règle mod_rewrite qui analyse les liens), il n'y a pas de véritable moyen de répondre sans connaître le framework. –

Répondre

2

Je suppose que vous prenez les « gentils » urls puis les réécrire à votre index.php avec le demande réécrite dans un get var ou 'route'.

Il y a quelques problèmes que vous rencontrerez dans le futur, l'un sera de savoir comment gérer les vars dans la requête (si je me souviens avoir eu affaire à un concept similaire il y a des années).

Personnellement, je voudrais simplement configurer votre fichier .htaccess pour envoyer toutes les demandes qui ne sont pas des fichiers/répertoires valides dans votre fichier bootstrap/index.php. Ensuite, faites l'analyse en PHP, pas dans un mod_rewrite trop complexe. Vous êtes déjà en train d'analyser la 'route' get var, pourquoi ne pas analyser toute la requête?

À ce moment-là la première étape de vous index.php fichier serait:

  • Retirez le.extension (ou identifiez la requête comme html/xml/json/etc)
  • Supprimez tout type d'URL de base.
  • Analyser le reste comme si vous faisiez la route get var.
0

Je ne suis pas un expert, mais essayez ceci:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?route=$1 [QSA,L] 
</IfModule> 
+0

merci pour votre réponse Nicky, mais je ne vois pas le suffixe html dans le code ci-dessus. De toute façon, je n'ai pas encore essayé. – Sarfraz

+0

Bonjour à tous, plus d'idées s'il vous plaît ????? – Sarfraz

2

Si je vous comprends bien, vous dites que vous avez utilisé pour enlever htaccess route = et que vous souhaitez également supprimer un suffixe .html. Je pense que vous vous en approchez mal.

j'aurais tous les liens dans votre application pointant vers vos URL préférées et ensuite htaccess INSEREZ sur la route = et les éléments index.php

Ainsi, un lien ressemble à ceci:

<a href="mysite.com/controller/function/parameters/go/here.html" /> 

et vous pouvez utiliser une règle htaccess semblable à la tonne de Nicky convertir en:

mysite.com/index.php?route=controller/function/parameters/go/here.html 

en fait Nicky fonctionnera bien. Vous avez la possibilité de supprimer le suffixe .html dans votre code index.php ou de la règle htaccess - plus facile à partir de PHP à mon avis.

Si vous souhaitez supprimer .html en utilisant htaccess alors ce sera probablement travailler (non testé):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)\.html$ index.php?route=$1 [QSA,L] 
</IfModule> 
+0

merci pour votre réponse Steve, mais vous n'avez probablement pas compris ma question correclty. Je ne veux pas supprimer l'accès html, je veux l'ajouter à chaque URI mais je me demande comment le faire? J'utilise un framework qui génère automatiquement des URI basées sur l'itinéraire. Donc, je ne peux pas mettre dans les liens avec le suffixe html ajouté à eux. J'espère que j'ai clarifié cette fois-ci. Toujours à la recherche d'une solution !! – Sarfraz

+0

simplement, comment ajouter le suffixe html à chaque URL? – Sarfraz

1

Comme d'autres, je pense que l'ajout doit se produire dans votre framework.

J'imagine que vous avez une fonction comme: $ html-> link ('products/shirts/99');

Cette fonction doit ajouter le '.html'.

Votre gestionnaire d'URL devrait ressembler à:

// produits $ query/chemises/99.html

$ l = explode ($ query, '/'); $ last = longueur ($ l); $ l [$ last-1] = sous-chaîne ($ l [$ dernier-1], find ($ l [$ dernier-1], '.html')) // Je fais les arguments depuis la mémoire leur.

Voici comment index.php de CakePHP serait modifié. Je vous suggère de regarder ce code comme un guide.

+0

yo à droite David, enfin je suis venu avec cette solution :) Merci à tous ceux qui ont répondu ... – Sarfraz