Architecture MVC, URL rewriting et dossiers virtuels

Discussion dans 'URL Rewriting et .htaccess' créé par RiderFx3, 31 Mai 2016.

  1. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    Bonjour à tous,

    Je suis nouveau ici, merci pour votre accueil.

    Je suis entrain de développer un backoffice pour un CMS maison pour finaliser mon projet de fin d'année et valider mon titre.

    Il est développé en PHP selon l'architecture MVC, et donc je n'ai qu'une seule page : index.php, tout le reste se passe dans les contrôleurs en fonction des GET passés dans l'URL.

    Tout fonctionne très bien, mais j'aimerai rendre les URL plus lisibles en créant des dossiers virtuels, et en cachant le nom des get. Je me servirai aussi de l'URL rewriting pour le front-end, afin d'améliorer le référencement des articles par exemple.

    Donc dans mon cas, admettons que je veuille afficher la page :
    Code:
    http://localhost/PHP/STAGE/index.php?c=User&a=edit&u_id=1
    et que je veuille qu'elle apparaisse comme ça :
    Code:
    http://localhost/STAGE/user/edit/1
    Devrais-je écrire ? :
    Code:
    RewriteRule ^user/edit/([0-9]+)/?$ /index.php?c=User&a=edit&u_id=$1 [L]
    ça ne fonctionne pas, et me recharge la page localhost de XAMPP.
    L'URL rewriting est activé et fonctionne avec les exemple simples des tutos.

    Merci pour votre aide.

    Romain.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 099
    J'aime reçus:
    303
    Tu t'es vraiment cassé la tête pour rien:
    https://www.webrankinfo.com/forum/pratique-htaccess-lire-avant-poser-t13288 ... l#p1217718

    index.php/User/edit/1 est bcp plus facilement rewrité:
    PHP:
    <span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /></span><span class="syntaxkeyword">list(,</span><span class="syntaxdefault"> $controller</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $action</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $id</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PATH_INFO'</span><span class="syntaxkeyword">]);<br />&nbsp;</span><span class="syntaxdefault"></span>
    C'est comme ça que font les principaux CMS.

    Encore mieux:
    http://upshots.org/php/php-regexrouter
    https://gist.github.com/dave1010/1214164
     
  3. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    Merci pour ta réponse rapide.

    Je ne comprends pas tout. Ou dois-je mettre la fonction explode du PATH_INFO ?

    j'ai un autoroutage dans mon index pour les controlleurs et les actions de chaque contrôleur.

    si je met ce code dans mon htaccess :
    Code:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php/$1 [L,QSA]
    ça ne me charge pas la bonne page, uniquement l'index du backoffice, et sans charger le CSS, malgré le fait que j'ai ajouté la ligne : <base href="http://localhost/PHP/STAGE/index.php" /> dans le head de l'index. (Je pense que je dois aussi changer le chemin des fichiers CSS et JS du coup). Le plus gros du problème étant que ça me charge pas la page demandée.

    Comment fonction l'explode du PATH_INFO exactement ? J'ai du mal à m'imaginer le cheminement.

    Merci encore.
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 099
    J'aime reçus:
    303
    Fait un test:
    index.php/foo/bar/baz

    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PATH_INFO'</span><span class="syntaxkeyword">]);&nbsp;</span><span class="syntaxdefault"></span>
     
  5. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    OK ça me renvoie : /foo/bar/baz
    Donc si je l'explode ça me les sépare.

    Mais je comprends pas comment ça reconstruit la bonne URL en fait ?
    Ou alors j'ai pas besoin de reconstruire l'URL et c'est directement ça que je fais passer dans mon autorouteur ?
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 099
    J'aime reçus:
    303
    Voilà exactement, ensuite le rewrite est bcp plus simple que les paramètres en $_GET.
     
  7. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    OK j'y vois un peu moins flou,

    Le fait est que pour le contrôleur est les actions, ça sera assez simple de modifier mon autorouteur, par contre pour mes GET, ils ne sont pas toujours identiques, voir pas dans le même ordre, de plus, ça m'oblige du coup à recoder toutes mes methodes du contrôleur exploitant les GET ?

    Exemple pour les users, mes get pour l'id sont "u_id" alors que pour les articles ce sont des "a_id"

    Alors soit je comprends pas vraiment la totalité de la solution, soit ça va me prendre des jours de tout recoder.

    Autre question, si mon index.php explode l'URL pour rediriger vers l'autorouteur, à quoi me sert htaccess ?

    Merci encore.
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 099
    J'aime reçus:
    303
    OK à toi de voir :)

    Avec PATH_INFO, le .htaccess servirait à rewriter: -http://example.com/index.php/controller/action/params en -http://example.com/controller/action/params avec 1 seule règle de rewrite.
     
  9. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    Oui effectivement j'aimerai supprimer le index.php :)

    Et donc ce que j'arrive pas encore à imaginer, c'est comme différencier les types de get qui peuvent passer dans l'URL.

    Exemple si dans l'URL j'ai deux identifiants différents exemple u_id et a_id (c'est un exemple) comment je différencie lequel est lequel ?

    Puisque ça donnerai article/edit/1/34
     
  10. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 099
    J'aime reçus:
    303
    Cfr. les 2 liens que je t'ai passé dans la 1° réponse, ça permet de "mapper" différents paramètres.
    Un 3° pour la route: http://altorouter.com/

    MVC c'est aussi un router/dispatcher :)
     
  11. RiderFx3
    RiderFx3 Nouveau WRInaute
    Inscrit:
    31 Mai 2016
    Messages:
    11
    J'aime reçus:
    0
    Salut,

    Je reviens vous dire que pour moi c'était trop compliqué de mettre en place ces solutions étant donné que tout mon MVC est déjà codé. Finalement en quelques lignes de htaccess je suis arrivé au résultat voulu et c'est bien plus simple à comprendre pour moi. (je me suis fait aider parce que je suis vraiment mauvais en preg_match).

    L'avantage aussi c'est que les URL non réécrites fonctionnent toujours.

    Code:
    RewriteRule ^articles/catdelete/(\w+)$ index.php?c=Articles&a=catdelete&c_id=$1 [L]
    RewriteRule ^articles/catedit/(\w+)$ index.php?c=Articles&a=catedit&c_id=$1 [L]
    
    RewriteRule ^articles/tagdelete/(\w+)$ index.php?c=Articles&a=tagdelete&t_id=$1 [L]
    RewriteRule ^articles/tagedit/(\w+)$ index.php?c=Articles&a=tagedit&t_id=$1 [L]
    
    RewriteRule ^articles/(\w+)/(\w+)$ index.php?c=Articles&a=$1&a_id=$2 [L]
    
    RewriteRule ^user/(\w+)/(\w+)$ index.php?c=User&a=$1&u_id=$2 [L]
    
    RewriteRule ^(\w+)/(\w+)$ index.php?c=$1&a=$2 [L]
    
    Merci encore pour l'aide.
     
Chargement...
Similar Threads - Architecture MVC rewriting Forum Date
Architecture et lien entre pages et blog Demandes d'avis et de conseils sur vos sites 6 Novembre 2020
Architecture site web Rédaction web et référencement 24 Mars 2020
Résultat google avec l'architecture du site et non le lien du produit Crawl et indexation Google, sitemaps 22 Avril 2018
Logiciel pour "dessiner" l'architecture de mon site Netlinking, backlinks, liens et redirections 1 Décembre 2017
Question architecture d'un site et sous domaine Débuter en référencement 10 Novembre 2015
Référencement local et architecture site Débuter en référencement 11 Mai 2015
Architecture Silo & Linking Interne Netlinking, backlinks, liens et redirections 17 Juin 2014
architecture de sites Débuter en référencement 3 Juin 2014
Conseil sur refonte d'url, architecture url sur un meme nom de domaine Débuter en référencement 6 Février 2014
WORDPRESS, Architecture du site, granulométrie et référencement Débuter en référencement 24 Juillet 2013