Spark Posté 7 Avril 2008 Posté 7 Avril 2008 (modifié) 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é 9 Avril 2008 par Dan
TheRec Posté 7 Avril 2008 Posté 7 Avril 2008 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.
Spark Posté 7 Avril 2008 Auteur Posté 7 Avril 2008 (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 Modifié 7 Avril 2008 par Spark
TheRec Posté 7 Avril 2008 Posté 7 Avril 2008 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 OnRewriteCond %{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 : Webmaster Hub - Mod_rewrite, ou la réécriture des URL "à la volée" Manuel Apache HTTP Server 2.x - mod_rewrite
Spark Posté 9 Avril 2008 Auteur Posté 9 Avril 2008 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 ?
captain_torche Posté 9 Avril 2008 Posté 9 Avril 2008 Oui, le point signifie "n'importe quel caractère".
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant