Redirection htaccess id=slug vers slug.php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redirection htaccess id=slug vers slug.php

Re: Redirection htaccess id=slug vers slug.php

par two3d » 10 juil. 2020, 22:26

" ainsi que les futures pages"

Non te faut pas dire que index.php?id=(etc..) existe, direct, d'entrée de jeu, tu met tes liens réécrits sur ton site et tu ne n'aura pas de surprise avec des URL de ton site type: tonsite.ext/index.php?id.... indéxées par les moteurs, car tu affiche en HTML des liens directement réécrits: comme article-quelquechose.php, personne ne saura que les pages du type "article-quelquechose.php" c'est en fait index.php?id=quelquechose

Après faire une réécriture sur index.php, bof bof... à moins que tu modifie ton DirectoryIndex dans ton htaccess pour avoir une autre page index :wink:

Re: Redirection htaccess id=slug vers slug.php

par two3d » 10 juil. 2020, 22:20

pour ton problème ya juste qu'à le mettre sur index.php

c'est relou à faire si ya plusieurs pages, on apprend de ses erreurs...

Re: Redirection htaccess id=slug vers slug.php

par or 1 » 10 juil. 2020, 14:36

si le slug est généré à partir d'un champ de la base de données, c'est le même code php pour toutes les pages.

$_SERVER['REQUEST_URI'] pour faire le test.

Re: Redirection htaccess id=slug vers slug.php

par fury_fury » 10 juil. 2020, 14:27

Mais avec ce code de redirection 301, il faudrait faire manuellement pour toutes les pages. On ne peut pas automatiser pour toutes les pages, ainsi que les futures pages.

Re: Redirection htaccess id=slug vers slug.php

par two3d » 10 juil. 2020, 11:19

Pour remedier à ce problème, deux solution:

la première c'est que dès le départ (la mise en route du site sur le web) il te faut mettre que des liens réécrits, tu ne dois avoir nul part un index.php?etc... mais seulement des article-(etc...) (ou autres, je suppose que tu n'aura pas seulement des article-(etc...)

la deuxième c'est de dire que cette page est à présent réécrite (quand on fait la modification après que le site soit lancé et que les pages sont enregistré dans les moteurs de recherche) donc il faut rediriger vers la page réécrite en 301, tu peux le faire en PHP avec un header(), ex:
header("Status: 301 Moved Permanently", false, 301);
header("Location: article-(etc...).php");
bien sûr ne pas mettre ce code en haut sans condition car il ferait une boucle mais vérifier si le visiteur (ou le robot) est sur la page index.php ou article-(etc...), si il est sur index.php, mettre le code ;)

Tu peux vérifie si il est sur une page où l'autre avec $_SERVER['SCRIPT_FILENAME'] (je penses ou sinon faire un var_dump($_SERVER) et voir à prendre le plus approprié ;)

Re: Redirection htaccess id=slug vers slug.php

par fury_fatal » 10 juil. 2020, 10:29

Je constate que les anciennes adresses marche aussi : index.php?id=slug

Ce qui donne des doublons sur les moteurs de recherche. Comment je peux rediriger tous les index.php?id=slug vers :
^article-([\w-]+)\.php$

Re: Redirection htaccess id=slug vers slug.php

par two3d » 07 juil. 2020, 21:29

Re: Redirection htaccess id=slug vers slug.php

par fury_fatal » 07 juil. 2020, 20:02

Cela explique pourquoi je ne vois jamais d'extension .php sur un site dynamique, mais uniquement .html ou sans extension.

Merci pour l'astuce RewriteRule ^article-([a-z0-9-]+)$

Je peux aussi faire comme ça :

Code : Tout sélectionner

RewriteRule ^article/([a-z0-9-]+)$ index.php?id=$1 [L]
Cela ressemble à du Regex. Je peux faire ceci ?

Code : Tout sélectionner

RewriteRule ^article/([\w-]+)$ index.php?id=$1 [L]
au lieu de

Code : Tout sélectionner

RewriteRule ^article/([\w\d-]+)$ index.php?id=$1 [L]
\w c'est déjà pour les caractères alpha-numériques ? Pourquoi mettre \d ?

Re: Redirection htaccess id=slug vers slug.php

par Saian » 07 juil. 2020, 15:16

Bien vu, index.php répondant au pattern forcément ça posait problème comme souligné par or1. Et effectivement tous les fichiers php que tu pouvais avoir aussi.

Re: Redirection htaccess id=slug vers slug.php

par two3d » 07 juil. 2020, 15:10

je fais comme ceci pour éviter les confusions; je rajoute un mot avant la suite du lien, ex:

Code : Tout sélectionner

RewriteRule ^article-([a-z0-9-]+)$ index.php?id=$1 [L]
pour suivre votre exemple:

Code : Tout sélectionner

RewriteRule ^article-([a-z0-9-]+).php$ index.php?id=$1 [L]
Pour information j'utilise plus l'anti-slash aux points, ça fonctionne quand même et c'est mieux lisible

Re: Redirection htaccess id=slug vers slug.php

par or 1 » 07 juil. 2020, 14:06

index.php répond à ^([\w\d-]+)\.php$ d'où une possible boucle infinie.
avec ^([\w\d-]+-[0-9]+-[\w\d-]+)\.php$ index.php ne répond plus.

Re: Redirection htaccess id=slug vers slug.php

par fury_fatal » 07 juil. 2020, 13:53

J'ai peut-être l'explication pour laquelle, cela ne marche pas avec .php :

Code : Tout sélectionner

RewriteRule ^([\w\d-]+)\.php$ index.php?id=$1 [L]
Tous les fichiers .php dans le même dossier sont devenus innaccessibles. Y compris index.php avec ou sans id. C'est la raison pour laquelle, cela ne marche pas.

Si je fais :

Code : Tout sélectionner

RewriteRule ^([\w\d-]+)\.php1$ index.php?id=$1 [L]
alors ça marche. Mais je n'ai pas envie d'une extension .php1

Re: Redirection htaccess id=slug vers slug.php

par two3d » 07 juil. 2020, 10:15

pour:

Code : Tout sélectionner

RewriteRule ^([\w\d-]+)\.html$ index.php?id=$1 [L]
c'est:
http://address/slug-article-1234-exemple.html

et pour:

Code : Tout sélectionner

RewriteRule ^([\w\d-]+)\.php$ index.php?id=$1 [L]
c'est:
http://address/slug-article-1234-exemple.php

logique mais il est parfois bon de le préciser

Re: Redirection htaccess id=slug vers slug.php

par Saian » 06 juil. 2020, 21:22

Y a pas de raison que ça ne marche pas du moment que tu mets bien .php dans la barre d'adresse également, sinon forcément l'expression ne match pas.

Re: Redirection htaccess id=slug vers slug.php

par fury_fatal » 06 juil. 2020, 20:30

Quelqu'un saurait m'expliquer pourquoi cela ne marche pas avec l'extension .php ?