Problème url rewriting et redirection

Nouveau WRInaute
Bonjour,

Actuellement, mon « htaccess » se trouvant à la racine de mon site, redirige toutes les URL vers un format unique commençant par : https://www... (avec www ou sans www, avec https ou http (toutes les combinaisons). Donc jusque-là tout est super !

Mon problème est que depuis que j’ai ajouté un fichier « htaccess » dans le dossier guitare « cours/guitare » (afin de réécrire certains types d’url), je n’ai plus aucune redirection et cela concerne toutes les urls présentes dans ce dossier guitare y compris celles qui ne sont pas concernées par cette réécriture.

Je souhaiterais que les urls de ce dossier qui sont concernées par la réécriture redirigent vers la nouvelle adresse et toujours dans le format « https://www. » et que celles qui ne sont pas concernées par la réécriture pointent comme avant vers le format https://www.

Je souhaiterais que cela soit possible en prenant en compte toutes les combinaisons possibles d’une adresse (avec www ou sans www, avec https ou http) pour que ça redirige toujours au bon format « https://www ».

La réécriture concerne les adresses de type : cours/guitare/ville.php?villeg=45000

Effectivement, ces adresses réécrites sont accessibles de plusieurs façons :

Avec l’ancienne adresse :
Code:
https://site.com/cours/guitare/ville.php?villeg=82000
http://site.com/cours/guitare/ville.php?villeg=82000
https://www.site.com/cours/guitare/ville.php?villeg=82000
http://www.site.com/cours/guitare/ville.php?villeg=82000
site.com/cours/guitare/ville.php?villeg=82000

Avec la nouvelle adresse :
Code:
https://site.com/cours/guitare/82000.php
http://site.com/cours/guitare/82000.php
https://www.site.com/cours/guitare/82000.php
http://www.site.com/cours/guitare/82000.php
site.com/cours/guitare/82000.php


Voici mon fichier htaccess qui se trouve à la racine de mon site :
Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteRule ^index.php$ https://www.site.com/ [R=301,L]

RewriteCond %{HTTP_HOST} !^www.site.com$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteRule ^(.*)$ https://www.site.com/$1 [L,R=301]

# Redirect all non-ssl to ssl.
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteRule ^(.*)$ https://www.site.com/$1 [R,L]


Et voici mon 2e htaccess qui se trouve dans le dossier guitare :

- celui-ci me réécrit bien la nouvelle url que je souhaite, mais l'ancienne url ne redirige pas vers la nouvelle.
- De plus, mes url de ce dossier guitare, non concernées par la réécriture, ne redirige plus comme avant vers le https://www

Code:
RewriteEngine on
RewriteRule ^cours-guitare-([0-9]+).php$  ville.php?villeg=$1 [R]

Je vous remercie par avance, pour une éventuelle réponse.
Cordialement,
Lionel
 
WRInaute impliqué
Je suis pas sûr de bien comprendre ce que tu exposes et ce que tu souhaites.

De façon générale, éviter la multiplication des .htaccess ; ce n'est bon ni pour la performance ni, surtout pour la maintenance.

Je testerai pour voir d'ajouter la RewriteRule dans le dossier guitare à celui présent à la racine.

En passant, je ne pense pas qu'adopter une structure de dossiers "en dur" pour ses scripts PHP soit une bonne chose, du moins pas une structure qui suive celle de l'URL.
 
Nouveau WRInaute
Bonjour,

Merci beaucoup pour votre réponse.

J'ai effectivement ajouté la RewriteRule dans le htaccess qui se trouve à la racine de mon site et cela fonctionne. Toutes les redirections se font correctement.

"je ne pense pas qu'adopter une structure de dossiers "en dur" pour ses scripts PHP soit une bonne chose"

Si je comprends bien... il serait donc préférable d'avoir qu’une seule RewriteRule ( donc dynamique...) qui s'adapte à tous mes dossiers ? C'est donc cela que vous me conseillez ?

Effectivement, avec la méthode que j'utilise pour le moment, cela m'obligerait à créer plusieurs règles d'écritures pour chacun des dossiers. Donc, si je comprends bien cette méthode serait déconseillée, car elle consommerait beaucoup trop de ressources, côté serveur... ?

Je vous remercie beaucoup pour votre aide, Lionel
 
WRInaute impliqué
Si je comprends bien... il serait donc préférable d'avoir qu’une seule RewriteRule ( donc dynamique...) qui s'adapte à tous mes dossiers ? C'est donc cela que vous me conseillez ?

Alors… oui et non.

Ce qu'il faut d'abord éviter, c'est la pluralité des .htaccess. Pour un site example.com/site/page/category/dev/web/php/article123456.htm s’il y a un .htacess à chaque "dossier", ça fait 7 fichiers à ouvrir, lire, et interpréter. Déjà, c'est pas idéal niveau performances (mais c'est rarement ça qui va pénaliser de façon substantielle la perf globale d'un site), c'est surtout l'enfer niveau maintenance : cela fait 7 fichiers à maintenir, et ça n'invite pas à tout régler en un minimum de règles avec, surtout, un minimum de redirections (qui là va par contre impacter la perf globale d'un site).

Si tu as la possibilité d'avoir une seule RewriteRule, plutôt que plusieurs RewriteRule pour traiter une problématique similaire, c'est avant tout un gain de lisibilité pour le développeur. Le gain de performance final sera minime sinon nul.

Ce que je disais à propos des dossiers "en dur", c'est que ça n'a pas beaucoup de sens de mettre ses fichiers sur le serveur de la même façon que sont les URL. Surtout c'est problématique d'avoir plusieurs "points d'entrée" sans justifications.

Ce que je préfère faire, c'est de n'avoir qu'un seul point d'entrée pour le site : index.php ; le reste de l'URL est "interprété" par ce fichier qui va renvoyer vers les scripts pertinents qui sont placés dans l’arborescence du site à un endroit auquel l'utilisateur ne peut pas directement accéder. Si je mets d'autres points d'entrée, c'est qu'il y a une bonne raison, ou un sous-site plus ou moins autonome, ou un traitement radicalement différent (un ajax.php par exemple).

Ne pas négliger les gains de temps côté développement / maintenance. Un code mieux fait est plus simple à maintenir, les erreurs sont plus simples à déceler et à corriger, le site est plus facile à faire évoluer.
 
WRInaute accro
Alors… oui et non.

Ce qu'il faut d'abord éviter, c'est la pluralité des .htaccess. Pour un site example.com/site/page/category/dev/web/php/article123456.htm s’il y a un .htacess à chaque "dossier", ça fait 7 fichiers à ouvrir, lire, et interpréter

C'est pas aussi simple que ça. C'est vrai quand on peux faire des règles dynamiques. Par contre, quand on est obligé de faire des règles à la main (rediriger toto vers titi), faire des htaccess dédiés dans chaque dossier concerné allège la charge :
1- tu renvoies directement à la bonne adresse concernées (et tu commences par le htaccess le plus spécifique)
2- c'est généralement plus lisible

c'est surtout l'enfer niveau maintenance : cela fait 7 fichiers à maintenir
Oui, mais chaque fichier pour un point spécifique.
Si besoin est.... je n'ai jamais vu ce type de structure en fait, mais plutôt plusieurs htaccess dans des dossiers "de plus bas niveau".

Si tu as la possibilité d'avoir une seule RewriteRule, plutôt que plusieurs RewriteRule pour traiter une problématique similaire, c'est avant tout un gain de lisibilité pour le développeur.
Mouais... perso je ne suis pas fana de la regex hyper compliquée qui est illisible au bout de 15 jours parce que tu as oublié, et je préfère décomposer même dans le même htaccess

Par contre, tout ce que je dis concerne des redirections de correction, des trucs qui ont bougé. Pour la réécriture des urls de base d'un site, tu as parfaitement raison
 
Nouveau WRInaute
Bonjour,

Ce que je disais à propos des dossiers "en dur", c'est que ça n'a pas beaucoup de sens de mettre ses fichiers sur le serveur de la même façon que sont les URL. Surtout c'est problématique d'avoir plusieurs "points d'entrée" sans justifications.

Lors de la réécriture; il n'est donc pas conseillé de suivre la hiérarchie originale de l'ancienne url.

Donc si je comprends bien... ma réécriture devrait plus ressembler à cette structure :

/cours-guitare-82000.php au lieu de /cours/guitare/82000.php : qui cette dernière URL conserve le chemin des différents dossiers d’où se trouve cette page.

Merci beaucoup pour ces compléments d'informations !
 
WRInaute accro
ça dépends

si example.com/cours/ montre une liste de tous tes cours, ça peut être intéressant de le laisser dans l'url.
 
WRInaute impliqué
Lors de la réécriture; il n'est donc pas conseillé de suivre la hiérarchie originale de l'ancienne url.

Non, ce n'est pas ça. Sur la réécriture, tu fais ce que tu veux.

Je parlais de l'emplacement des fichiers PHP dans l'arborescence du site. Tu peux mettre tes fichiers PHP un peu où tu veux, mais suivre l'arborescence de l'URL n'est généralement pas la manière la plus adaptée de ranger les fichiers. Et faire appel à plusieurs points d'entrée, pas la meilleure façon d'avoir un site efficient et facile à coder.
 
Discussions similaires
Haut