suite à des modifications des pages du site, et pour éviter que les liens référencés sur google n'amènent sur une erreur 404, je tente de rediriger les anciennes pages vers les nouvelles
j'ai un petit soucis avec mes URL, j'ai mis dans mon htaccess
RewriteEngine on
RewriteRule ^poeme.php?id=([0-9]+)&cat=tdm$ tdmpoeme.php?id=$1 [L]
Ca m'a l'air juste. Juste que ladite transformation n'est pas exprimée du point de vue du processus de réécriture mais de ses sources HTML, j'imagine, donc s'en trouve inversé. Mais j'ai peut être mal compris ...
> Mais il ne se passe rien...
Erreur classique : c'est normal, tu n'as pas compris le fonctionnement de RewriteRule : le motif testé par RewriteRule ne concerne que le chemin (en partie) d'une URL. Ca n'inclut pas la query string (la partie ?id=([0-9]+)&cat=tdm donc). Pour faire une condition sur cette dernière, il faut passer, comme pour toute autre partie de l'URL, par une ligne/directive RewriteCond et la variable appropriée (%{QUERY_STRING} ici).
Il manque un espace entre RewriteCond comme RewriteRule et le motif
le point s'échappe s'il est littéral
(.*) est inutile, on attend rien après tdmpoeme.php, du coup il faudrait même un ancrage ($)
si la redirection est permanente, il faut l'indiquer par le flag R=permanent (c'est 302/temporaire par défaut)
si on tape sur le même domaine, il n'est pas utile d'utiliser une URL complète (virer https://www.lespoetes.net), ce qui permet en plus de faire des tests sur un autre environnement
id=(.*) est incorrect, tu vas reprendre tous les paramètres qui suivent éventuellement l'id plus éventuellement capturer un paramètre dont le nom termine par id. (?:^|&)id=(\d+) serait plus strict
Après si tu testes tu dois bien savoir si tu obtiens ce que tu souhaites ou non (mais attention, quand on joue avec des redirections permanentes, de bien vider son cache entre ses tests)
PS : zut, j'ai zappé que ça va faire un an et demi que le forum est buggué : il faut lire & à ce &
Serait-ce trop te demander d'expliciter l'écriture de la récupération de variable dans le RewriteCond ?
En première lecture, la première partie semble expliquer que ça se passe après le point d'interrogation, le id= au milieu est le nom de la variable et le (\d+) permettrait de récupérer "n'importe quel chiffre" situé après...
Ta remarque sur la redirection temporaire m'intéresse, cette redirection est destinée à indiqué à google que la page à changer de place, serait-il intéressant de mettre justement l'indication comme quoi cette redirection est temporaire ?
Merci d'avance pour ton retour (ou le regard d'autres experts du regex)
Je ne vais pas réexpliquer ici tous les détails de la réécriture quand on les trouve dans tes tutos ou la doc mais tu sembles avoir compris l'idée.
> Ta remarque sur la redirection temporaire m'intéresse, cette redirection est destinée à indiqué à google que la page à changer de place, serait-il intéressant de mettre justement l'indication comme quoi cette redirection est temporaire ?
Elle devrait donc être permanente (remplacer R par R=permanent)
Il manque toujours l'échappement du point : ^tdmpoeme.php$ => ^tdmpoeme\.php$ sinon tu serais susceptible d'accepter n'importe quel octet à cet endroit (tdmpoeme3php, tdmpoemexphp, etc)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Eric (https://www.lespoetes.net)
N'oubliez pas d'activer les erreurs PDO.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Eric (https://www.lespoetes.net)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Eric (https://www.lespoetes.net)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli