Redirection avec htaccess, possible ?

Nouveau WRInaute
Bonjour,

J'ai déplacé récemment des fichiers CGI (perl) de mon site. Ils étaient avant dans cgi-bin/1/ et sont maintenant dans cgi-bin/ tout court.

Je voudrais placer une redirection, de façon à ce que, lorsqu'une personne tape :

domaine.com/cgi-bin/1/index.cgi?action=machin

cette personne soit rédirigée vers :

domaine.com/cgi-bin/index.cgi?action=machin

Je voudrais une vraie redirection, pas un simple rewriting. C'est possible avec .htaccess ?

merci
 
Nouveau WRInaute
Bon, voilà ce que j'ai fait et ça fonctionne.. à peu prés :

RedirectMatch 301 /1/(.*) http://www.tro-online.com/cgi-bin/$1

Le problème, c'est que le ? et tout ce qui suit n'est pas pris en compte !

exemple : si je tape

/cgi-bin/1/test.cgi?commande=1

je suis renvoyé vers :

/cgi-bin/test.cgi les paramètres ne sont pas pris en compte !

Pourtant, quand je met .* dans la synatxe, le . doit prendre en compte n'importe quel caractère, non ?

Merci de votre aide.
 
Nouveau WRInaute
Le plus simple est de mettre un lien symbolique du rep /cgi-bin/1 vers /cgi-bin :

place-toi dans le repertoire cgi-bin et tappe la commande :

ln -s . 1

ainsi, toute demande faite vers le répertoire /cgi-bin/1 sera exécutée sur le répertoire /cgi-bin
 
Nouveau WRInaute
merci !

j'ai essayé, mais ça ne marche pas ! erreur 500 si je rajoute ta ligne, que ce soit avant ou aprés le RewriteEngine on .
 
T
Thierry Chatel
Guest
Tu peux très bien faire une vraie redirection par un RewriteRule dans le .htaccess. C'est le flag 'R' qui sert à ça. Sauf que par défaut ça envoie un code HTTP 302 pour la redirection ("Déplacé temporairement"), il est préférable de spécifier explicitement d'utiliser le code 301 ("Déplacé définitivement").

Ca doit faire un truc dans le genre :
Code:
RewriteRule /cgi-bin/1/(.*)$ /cgi-bin/$1 [R=301,L,QSA]

Le R=301 pour la redirection sur le client avec un code 301, le L pour ne pas continuer le traitement du .htaccess, et le QSA pour conserver la même query string.
 
Nouveau WRInaute
C'est gentil mais ça ne marche pas !

La ligne est totalement ignorée par le serveur ! (alors que les autres rewriterule fonctionnent bien).

Peut-être une protection pour éviter qu'un CGI qui ne devait pas être exécuté ne le soit pas ?

Tout ce que j'ai réussi à faire, c'est :

Code:
RedirectMatch 301 ^/cgi-bin/1/(.*) http://www.tro-online.com/

J'avais bien essayé :
Code:
RedirectMatch 301 ^/cgi-bin/1/(.*) http://www.tro-online.com/cgi-bin/$1
mais le $1 ne contient que le nom du script et non les paramètres (query sting)

J'ai essayé en ajoutant [QSA] mais ça ne donnait rien (erreur 500)
Merci
 
Nouveau WRInaute
J'ai essayé aussi :

Code:
RedirectMatch  ^/cgi-bin/1/(.*) http://www.tro-online.com/test/$1 [QSA]

mais le query string n'est pas pris en compte non plus !
 
Nouveau WRInaute
non, c'est pareil : le query string n'est pas pris en compte !

cgi-bin/1/index.cgi?machin redirige sur :

cgi-bin/index.cgi (sans le ? et ce qui suit)..

Une idée ?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut