Aller au contenu

Redirection vers une URL inconnue


Sujets conseillés

Bonjour,

Je voudrait savoir si cette syntaxe est autorisé, est ce que l'on peut mettre une regex dans l'url redirigé ? et si non comment faire autrement :

Redirect permanent /forums/search.php?action=show_user&user_id=([0-9]*) http://www.monsite.be/([*]*)-u$1.html [L]

A par ça, ([*]*) doit vous sembler farfelu, mais je ne sais pas comment dire "tout autoriser autant de fois qu'on veut". Concrètement il s'agit d'un pseudonyme, l'URL pointe vers un profil.

Je demande ça pour donner un coup de main sur un site qui n'est pas le mien (donc je ne peux pas tester le code si dessus, d'où ma question), et aussi pour mon enrichissement personnel.

Merci

Modifié par Dan
Lien vers le commentaire
Partager sur d’autres sites

Non ce n'est pas possible aussi facilement, pour deux raisons, la première est que le deuxième paramètre de RedirectMatch (oui car la syntaxe que tu as utilisée correspond à un RedirectMatch, pas Redirect permanent ou RedirectPermanent) n'est pas une expression régulière, la seule spécialité est qu'il peut accepter les références arrières, comme tu l'as fait avec $1.

La deuxième est que pour faire ce que tu souhaites, il faudrait que le nom de l'utilisateur soit disponible dans l'URL de base, apparemment ce n'est pas le cas. Ainsi, la solution la plus simple est d'utiliser l'ancienne page pour effectuer une redirection (301, permanente) grâce à la fonction PHP nommée header. Depuis PHP tu pourras récupérer le nom de l'utilisateur (grâce à son id, dans ta base de données je suppose) et effectuer une redirection vers la bonne page (avec le nom d'utilisateur dans l'URL).

Sinon, dans le cadre d'une expression régulière (ou plus justement, rationnelle), le meta-caractère signifiant "n'importe quel caractère" est le "." (point), ensuite tu lui fais succéder un quantificateur comme "+" (1 ou plus), "*" (0 ou plus) ou "?" (0 ou 1). Si tu veux une explication exhaustive de PCRE (moteur d'expression rationnelles), PHP dispose d'une page à ce sujet.

Bonne continuation.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci pour ta réponse, en même temps la question était bête, le navigateur ne va pas deviner vers quoi l'URL doit pointer.

Pour le RedirectMatch , je ne connaissais pas, ça explique pourquoi j'avais une erreur 500 lors de ma simulation ? Si j'ai bien compris un RedirectMatch est utilisé pour faire des redirections avec des expression régulières, alors que RedirectPermanent ne le permet pas ? EDIT non il semblerais que ce soit pour rediriger des répertoires ...

Par contre effectivement je n'avais pas envisagé la solution avec PHP qui ouvre la porte à des solutions plutôt facile.

Merci

Tu pourras peut être m'expliquer pourquoi cette simulation ne fonctionne pas ?

RedirectMatch 301 ^/forums/viewforum.php?id=([0-9]*)$ http://www.domaine.info/f$1.html

Le fichier viewforum n'existe pas, mais le fichier f2.html lui si.

Quand je tape :

http://www.domaine.info/forums/viewforum.php?id=2

J'ai un 404.

Tu as une idée du pourquoi ? Est-ce qu'il faut mettre avant un genre RedirectMatch On ? Je test chez 1&1.

En parallèle quand je met ça, ça ne fonctionne pas non plus (404) :

Redirect permanent ^/forums/viewforum.php?id=2$ http://www.domaine.info/f2.html

Alors que c'est typiquement ce que j'ai déjà utilisé. Ca vient du paramètre ?id=2 dans le fichier htaccess, si je le supprime, ça fonctionne (pas comme souhaité).

Pas simple toussa :nonono:

Modifié par Spark
Lien vers le commentaire
Partager sur d’autres sites

Si tu as besoin de traiter des informations se trouvant dans la querystring (tout ce qui se trouve après le premier "?" dans ton URL), la directive RewriteMatch n'est pas adéquate et le mod_alias ne suffira pas. Tu as besoin d'utiliser le mod_rewrite, et des conditions :

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^forums/viewforum\.php$ http://www.domaine.info/f%1.html? [R=301,L]

Ce qui est discutable là, c'est que n'importe quelle URL passe par cette condition et dès qu'il y a comme unique paramètre id=<chiffre> la règle de réécriture sera analysée (mais seul la page forums/viewforum.php vérifie la règle)... mais si ton site n'a pas une trafic trop important cela ne posera pas de problème.

Tu notera que j'ai utilisé %1, car je souhaite utiliser la référence arrière trouvée dans la condition.

Plus de lecture au sujet du mod_rewrite :

Lien vers le commentaire
Partager sur d’autres sites

Merci pour tes explication, je pense avoir à peut près tout compris.

Par contre pourquoi est-ce qu'il y a un backslach avant .php ? Est ce que le point à une signification particulière ?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...