8722 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Je viens vers vous pour un petit soucis, je suis actuellement dans le développement de mon premier vrai site web et je suis en train de m'occuper de tout l'url rewriting, sauf que je galère complet !

J'ai déjà suivi plusieurs tutos à ce propos et j'ai réussis à faire mes redirections basiques sans trop de problèmes pour des liens relativement faciles (affichage de news, etc...), mais dès que l'url ce complique un peu je suis un peu perdu et je ne vois pas où j'ai fais une erreur.

Actuellement j'ai deux .htaccess, un à la racine du site, celui là fonctionne sans problème, et un autre dans un sous dossier (j'ai préféré séparé, dans un soucis de lisibilité et savoir où aller changer quand ce sera nécessaire). Le soucis viens au niveau de l'.htaccess du sous dossier, ma première redirection de base fonctionne sans problème, mais la suivante pas et je ne sais pas pourquoi.

Typiquement j'aimerais une url finale de ce type : https://www.domaine.be/forum/x-x-x

Les 'x' représentant différents id pour voyager dans le forum. Actuellement j'aimerais afficher les premièrs éléments dans ma hiérarchie sous une url https://www.domaine.be/forum/x et c'est la que ça coince, je me retrouve avec une erreur Not Found Smiley decu

Mes deux htaccess étant les éléments suivants :

#On empêche de parcourir les dossiers
Options -Indexes

# On suit les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# On force à avoir les 'www'
#--------------------------------------------------

RewriteCond %{HTTP_HOST} ^domaine.be$
RewriteRule ^(.*)  https://www.domaine.be/$1  [QSA,L,R=301]

#--------------------------------------------------
# On redirige vers l'https
#--------------------------------------------------

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$  https://www.domaine.be/$1  [R=301,L]

#--------------------------------------------------
# Refuser l'accès aux images à d'autres sites
#--------------------------------------------------
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://www.domaine.be/.*$ [NC]
ReWriteRule .*\.(gif|png|jpe?g)$ - [F]

#--------------------------------------------------
# Règles de réécriture d'URL pour le site :
#--------------------------------------------------

# Pour le formulaire après envoi d'un message
# RewriteRule ^(.+)-(.+).html$ /index.php?page=$1&statut=$2 [L]

# Afficher une news, un test , etc
RewriteRule ^(.+)/([0-9]+)$ /index.php?page=$1&$1=$2 [L]


et celui du forum :
# On suit les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL pour le forum :
#--------------------------------------------------

# Afficher les messages d'un sujet
# Avec pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3&page=$4
# Sans pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]

# Afficher les sujets d'une section
# Avec pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&page=$3
# Sans pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2 [L]

# Afficher les sections d'un salon
RewriteRule ^forum/([0-9]+)$ /forum/index.php?salon=$1 [L]

# Afficher les salons
RewriteRule ^forum$ /forum/index.php [L]


Je pense que le problème vient du fait qu'il prend en compte ma règle par rapport aux news du fichier présent à la racine et du coup zappe la règle pour afficher les sections d'un salon mais je ne suis pas certain.

Merci d'avance pour éclairer ma lanterne ! Smiley smile
# On suit les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL pour le forum :
#--------------------------------------------------

# Afficher les messages d'un sujet
# Avec pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3&page=$4
# Sans pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]

# Afficher les sujets d'une section
# Avec pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&page=$3
# Sans pagination
#RewriteRule ^forum/([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2 [L]

# Afficher les sections d'un salon
RewriteRule ^forum/([0-9]+)$ /forum/index.php?salon=$1 [L]

# Afficher les salons
RewriteRule ^forum$ /forum/index.php [L]


Il y a pas un truc qui te choque ? Smiley murf
Modifié par Tintin75 (28 Oct 2018 - 13:33)
Tintin75 a écrit :


Il y a pas un truc qui te choque ? Smiley murf


Ben, non... Smiley ohwell

Hormis le flag manquant que j'ai rajouter (même si les lignes sont en commentaires actuellement), non je ne vois rien.

EDIT :

J'ai finalement trouvé d'où venait mon erreur, voici le htaccess corrigé
# On suit les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL pour le forum :
#--------------------------------------------------

# Afficher les messages d'un sujet
# Avec la pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3&page=$4 [L]

# Sans pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]

# Afficher les sujets d'une section
# Avec pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&page=$3 [L]

# Sans pagination
RewriteRule ^([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2 [L]

# Afficher les sections d'un salon
RewriteRule ^([0-9]+)$ /forum/index.php?salon=$1 [L]

# Afficher les salons
RewriteRule ^forum$ /index.php [L]


Cependant, j'ai un ultime soucis, le fichier confond l'affiche des sujets avec pagination et l'affichage d'un sujet comme la structure de l'url est identique. Comment je peux faire pour empêcher ça ?
Modifié par Yadrei (28 Oct 2018 - 17:01)
Modérateur
Bonjour,

Tout comme le serveur, j'ai du mal à faire le distingo entre
 Sans pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]
et

# Afficher les sujets d'une section
# Avec pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&page=$3 [L]
la règle étant exactement la même.

Ce qui me laisse à penser que cette seconde partie n'est jamais exécutée.

Je vois 2 cas de figure (non exhaustif) :
Soit vous changez votre structure -- pas évident quand on a bien avancé sur un projet
Soit vous introduisez un élément distinctif dans les url de base.

Par exemple, insérer une lettre dans la dernière série de chiffre. 's' pour sujet et 'p' pour page. Ce qui donnerait :
https://www.domaine.be/forum/1-2-s3 => exécuterait la première réécriture
https://www.domaine.be/forum/1-2-p3 => exécuterait la seconde

Bon bien sûr ce n'est une idée lancée en l'air car je ne sais absolument pas si vous passez par un CMS sur lequel vous avec accès à ce genre de modification ou s'il s'agit d'un code fait entièrement a mano.
Modifié par Greg_Lumiere (29 Oct 2018 - 14:18)
Greg_Lumiere a écrit :
Bonjour,

Tout comme le serveur, j'ai du mal à faire le distingo entre
 Sans pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]
et

# Afficher les sujets d'une section
# Avec pagination
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /forum/index.php?salon=$1&section=$2&page=$3 [L]
la règle étant exactement la même.

Ce qui me laisse à penser que cette seconde partie n'est jamais exécutée.

Je vois 2 cas de figure (non exhaustif) :
Soit vous changez votre structure -- pas évident quand on a bien avancé sur un projet
Soit vous introduisez un élément distinctif dans les url de base.

Par exemple, insérer une lettre dans la dernière série de chiffre. 's' pour sujet et 'p' pour page. Ce qui donnerait :
https://www.domaine.be/forum/1-2-s3 => exécuterait la première réécriture
https://www.domaine.be/forum/1-2-p3 => exécuterait la seconde

Bon bien sûr ce n'est une idée lancée en l'air car je ne sais absolument pas si vous passez par un CMS sur lequel vous avec accès à ce genre de modification ou s'il s'agit d'un code fait entièrement a mano.


Bonjour et merci de la réponse

Effectivement elles sont identiques, à la base j'espérais qu'il soit possible de les distinguées via une condition mais ça ne semble pas être le cas. Et je code entièrement à la main, je n'aime pas les CMS Smiley langue
Donc je peux tout à fait changer cela facilement dans mon code. Et si j'ai bien compris, côté htaccess j'aurais simplement à faire quelque chose du genre ?

 Sans pagination
RewriteRule ^([0-9]+)-([0-9]+)-s([0-9]+)$ /forum/index.php?salon=$1&section=$2&sujet=$3 [L]


PS : En continuant à farfouiller sur le net après une solution depuis hier, je suis tombé sur l'utilisation du slug pour les URL, qui est pratiquement entièrement traité côté serveur, est-ce vraiment important/utile par rapport à une redirection via htaccess ? Car je vois énormément de sites qui passent des id dans l'url en plus de texte, et de ce que j'ai vu hier apparemment ce n'est pas (plus ?) une bonne manière de faire
Modifié par Yadrei (29 Oct 2018 - 15:21)
Modérateur
Yadrei a écrit :
Et si j'ai bien compris, côté htaccess j'aurais simplement à faire quelque chose du genre ?
Oui exactement, ainsi vous pouvez aisément distinguer vos règles de réécriture et vous assurer une bonne maintenabilité.

Yadrei a écrit :
je suis tombé sur l'utilisation du slug pour les URL
Je ne connais pas Slug...


Yadrei a écrit :
passent des id dans l'url en plus de texte, et de ce que j'ai vu hier apparemment ce n'est pas (plus ?) une bonne manière de faire
Perso je ne suis pas très pour e passage de paramètre via l'url. C'est trop à la vue de l'utilisateur, donc je réserve ceci à de rares cas (par exemple pour l'appel à une Css).
De plus ce type de construction de l'url n'est pas du tout SEO friendly.

Alors il est vrai que ce phénomène était comme une sorte de mode il y a quelques temps mais on voit de plus en plus de site qui ont changé ceci pour passer le titre de leur page via l'url (ce que fait Alsa d'ailleurs).

Même si le poids vis-à-vis de Google reste minime, ça ajoute quelques points pour se faire bien voir.

D'autre part, en plus de devenir compréhensible par les robots, une url ainsi fabriquée parle beaucoup plus aux utilisateurs ; imaginez que vous mettiez l'un de ces deux liens en favoris, lequel vous permet de vous y retrouver le plus facilement ?
- https://mydomain.ext/forum/2018-15-4
- https://mydomain.ext/forum/la-reproduction-assexuee-des-poissons-rouge-en-hiver

Par contre ça a tout de même un (au moins un) désavantage. Il faut appliquer un bon nombre de règles (donc avoir une solide convention de nommage) afin de na pas se faire piéger par les caractères spéciaux et accentués.

En clair, un choix s'impose: maintenir la construction actuelle des url ou basculer, non pas vers le côté obscur, mais vers des url humainement compréhensibles.
Meilleure solution
Merci des réponses !

N'ayant absolument aucune idée actuellement sur la méthode "full texte" sans aucuns paramètres visibles, je pense que je vais revoir mes url actuelles comme je n'en ai pas énormément (et que j'ai quelques petits soucis avec ma méthode actuelle) et partir sur une solution à la manière de l'exemple de NorrisBennoi Smiley smile
Modifié par Yadrei (30 Oct 2018 - 15:31)