8768 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous,

Je planche depuis quelques temps sur le sujet de l'url rewriting et m'aperçois que finalement je nage en eau trouble. J'ai bien du mal à comprendre cette histoire de réécriture d'url à la volée et du coup je me demande si je ne suis pas en train de faire fausse route.

Considérons www.mondomaine.ext comme pointant vers la racine de mon hébergement.

Je trouve que ce dossier est déjà fort encombré avec les favicons, traceurs pour le référencement et tout un tas de fichier qu'il est indispensable de maintenir à cet endroit.

Du coup, pour faciliter la maintenance de mes pages, j'ai eu l'idée de placer mes pages web principales dans un sous dossier (appelons-le le dossier Pages).

Ce qui donne par exemple pour la page d'accueil le chemin d'accès suivant:
http://www.mondomaine.ext/Pages/Accueil.php

A la racine de l'hébergement j'ai donc placé un fichier index.php qui contient une simple redirection vers la page d'accueil:
header("Location: htitipi://www.mondomaine.ext/Pages/Accueil.php");exit;


Jusqu'ici tout va bien comme dirait l'autre ; voyons maintenant l’atterrissage. Smiley cligne

Ce qui m'embête dans cette histoire est que dans la barre d'adresse du navigateur apparaît le dossier Pages.
L'idée que j'ai en tête est d'empêcher l'affichage de ce sous-dossier sans toucher à mon arborescence.
C'est-à-dire qu'en saisisant www.mondomaine.ext dans la barre d'adresse je souhaite qu'elle soit réécrite sous la forme www.mondomaine.ext/Accueil.php tout en pointant sur le fichier situé à www.mondomaine.ext/Page/Accueil.php.

Je pensais que ceci était réalisable via le htaccess et le mod rewrite mais 100% de mes tests sont négatifs. Soit le sous-dossier reste apparent, soit j'ai droits à un 404 et dans le pire des cas j'obtiens même un 500.

Ce qui me fait penser que je ne suis peut-être pas du tout sur la bonne voie. Vers quelle direction dois-je orienter mes recherches ?
Modifié par Greg_Lumiere (07 Oct 2016 - 17:21)
Merci Zelena. J'étais moi aussi tombé sur cette source d'information dont je n'arrive pas à faire sortir la solution à mon problème.

Je suis en train d'essayer de rediriger les requêtes sur les fichiers index.php ver le fichier Accueil afin d'observer et décortiquer le phénomène.

Ainsi avec
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^index.(html|php(.?))
RewriteRule index.(html|php(.?)) Pages/Accueil.php [QSA,L]
J'observe qu'en saisissant l'adresse htipipi://www.mondomaine.ext/index.php, je suis bien redirigé vers la page Accueil. Par contre l'url présente dans la barre d'adresse du navigateur reste inchangée.

Un sacré schmilblik !
Hum... encore une fois, je ne suis pas du tout spécialiste... mais j'ai l'impression que vous avez compliqué les choses...

Ce drapeau [QSA], sur la page sur les drapeaux, voilà ce que ce site en dit :
Lorsque l'URL de requête possède des arguments, le comportement par défaut de l'engine de RewritingRule est de supprimer ces arguments et des les remplacer par leurs homologues générés lors de la réécriture.

Mais là dans la ligne avec le drapeau QSA, il n'y a pas de $1... j'ai l'impression que c'est pour cela que l'adresse est reprise dans son intégralité...

Le RewriteCond, je ne le comprends pas non plus mais vous devez bien avoir une raison.

Smiley smile
Zelena a écrit :
j'ai l'impression que vous avez compliqué les choses...
Ça je veux bien le croire.

Zelena a écrit :
Ce drapeau [QSA], sur la page sur les drapeaux, voilà ce que ce site en dit :
Lorsque l'URL de requête possède des arguments, le comportement par défaut de l'engine de RewritingRule est de supprimer ces arguments et des les remplacer par leurs homologues générés lors de la réécriture.
Ok, maintenant je comprends l'utilité de cette option.

Zelena a écrit :
Le RewriteCond, je ne le comprends pas non plus mais vous devez bien avoir une raison.
Aucune raison c'est vrai ! J'ai simplifié ces deux lignes avec RewriteRule index\.(html|php(.?))$ Pages/Accueil.php [NC,L] qui a pour effet de renvoyer toutes les requêtes sur les index vers la page d'accueil.

Par contre impossible de virer le répertoire Pages de l'uri. Mystère et boule de gomme.

RewriteCond %{REQUEST_URI} (.*)Page/(.*) [NC]
RewriteRule (.*)Page/(.*) $1/$2 [QSA,NC,L]
Me renvoi un 404 car il ne trouve pas le fichier cible à la racine du site Smiley sweatdrop
Modifié par Greg_Lumiere (07 Oct 2016 - 20:04)
Zelalsan a écrit :
salut,
un truc du genre devrait marcher
RewriteEngine On
RewriteRule ^(index\.(php|html))?$  http://www.mondomaine.ext/Accueil.php  [R=301,L]
RewriteRule ^([^\/]+)\.php$ pages/$1.php [L]
Effectivement, ça marche merveilleusement bien ! Merci beaucoup.

Voici qui me permet d'y voir plus clair. D'ailleurs j'ai même poussé le vice en mettant comme ceci:
DirectoryIndex index.php Page/accueil.php
# Ceci afin d'empêcher de lister les répertoires qui ne possèdent pas de fichier index

Options -Indexes
#Petite sécurité en plus qui abouti à un 403 ; théoriquement ça ne devrait pas être en fonction

RewriteEngine on
#Classique mais indispensable

RewriteRule ^(.*)\.htm[l]?$ $1\.php [NC]
# je commence par règler le problème des html: "conversion" en php

RewriteRule ^([^\/]+)\/+(index\.php)?$   http://www.mondomaine.ext/accueil.php   [NC,R=301,L]
#Les appels aux fichiers index sont redirigés de façon permanente vers la page d'accueil. Le top c'est que ça fonctionne quelle-que soit 'arborescence : merci Zelalsan

RewriteRule ^([^\/]+)\.php$ Pages/$1\.php [NC,L]
#Enfin, les appels aux fichiers php sont réécris sans montrer l'arborescence (dossier Pages): encore merci Zelalsan


Je pense qu'il me reste à me positionner sur avec ou sans www mais je devrais m'en sortir.


Par contre, ôtez moi d'un doute s'il vous plaît. Il me faut préciser dans mes pages l'uri canonique, non ?
Soit htitipi://www.mondomaine.ext/mapage.php

Il y aurait-il autre chose auquel je n'aurais pas pensé ?