Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redirection 301 et site en MVC

    17 octobre 2018 à 9:59:14

    Bonjour

    J'ai un site assez ancien, fait avec l'organisation en MVC.

    Du coup j'ai des url de ce type :

    https://www.monsite.com/?module=static&action=ancien

    Je me décide à nettoyer un peu cela et j'ai réussi à faire du rewriting via mon htaccess.

    Par contre je bute pour faire les redirections 301. J'ai fait plein de tests et ces instructions dans mon htaccess ne fonctionnent pas :

    RedirectPermanent /?module=static&action=ancien https://www.monsite.com/ancien.html

    Auriez vous des conseils pour me faire sortir de cette impasse... ? :)

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      17 octobre 2018 à 11:43:08

      Les directives Redirect* ne prennent pas en charge la query string, tu dois également faire tes redirections via la réécriture.

      • Partager sur Facebook
      • Partager sur Twitter
        17 octobre 2018 à 13:53:01

        Merci Julp pour ta réponse.

        Je crois donc comprendre que les redirections ne fonctionneront pas avec des urls tels que ?module=static&action=ancien.

        Ok. Mais j'ai du mal à voir ce que tu entends par "des redirections via la réécriture".

        Mes réécritures fonctionnent. Mais je suppose que j'ai raté une étape pour la redirection?

        • Partager sur Facebook
        • Partager sur Twitter
          17 octobre 2018 à 14:02:44

          > Je crois donc comprendre que les redirections ne fonctionneront pas avec des urls tels que ?module=static&action=ancien.

          C'est exactement ce que je t'ai dit : la partie ?module=static&action=ancien s'appelant la query string.

          > Mais j'ai du mal à voir ce que tu entends par "des redirections via la réécriture".

          Si tu reprends la doc de RewriteRule, tu verras qu'il y a un flag R pour effectuer des redirections HTTP au lieu de réécriture "normale".

          • Partager sur Facebook
          • Partager sur Twitter
            17 octobre 2018 à 16:23:29

            Merci. J'ai suivi ta piste et effectivement c'est la bonne.

            Mais, je tourne autour de la solution depuis 2 heures, j'ai éclusé pas mal de tuto sur le web et visiblement j'ai un problème de syntaxe.

            En clair soit j'ai une erreur 500, soit j'arrive à rediriger toutes les pages vers la même et unique page (pas bon bien sur) soit la redirection ne marche pas.

            J'en suis là :

            RewriteCond %{QUERY_STRING} ^module=static&action=individuelle
            RewriteRule .* https://www.monsite.com/immeuble.html? [L,R=301]

            • Partager sur Facebook
            • Partager sur Twitter
              17 octobre 2018 à 16:35:52

              Ca a l'air (syntaxiquement) correct. Après il faut :

              1. que tu lises le log d'erreur d'Apache : la 500 ça peut être tout et n'importe quoi et il te donnerait plus de précisions entre une erreur de syntaxe et une boucle infinie justement
              2. avoir l'intégralité du .htaccess de façon à déterminer si des règles ne se tirent pas dans les pattes, ne bouclent pas, etc

              Aussi préfères écrire :

              RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
              RewriteCond %{QUERY_STRING} (?:^|&)action=individuelle(?:&|$)
              

              à RewriteCond %{QUERY_STRING} ^module=static&action=individuelle

              Parce que cette seconde version ne matchera que les URL où ces paramètres sont dans cet ordre (et encore, elle doit commencer par module et après individuelle, on pourrait trouver n'importe quoi - en valeur). Et le .*, c'est un peu trop, logiquement, tu devrais pouvoir être plus précis.

              PS : le forum est buggué depuis 1 ans et demi, il faut lire & à ces & moisis

              -
              Edité par julp 17 octobre 2018 à 16:43:37

              • Partager sur Facebook
              • Partager sur Twitter
                17 octobre 2018 à 17:02:16

                Mon htaccess ne contient que les lignes suivantes.

                Dans le cas ci dessous, la redirection ne fonctionne pas, j'ai un code 200.

                RewriteEngine on
                
                RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
                RewriteCond %{QUERY_STRING} (?:^|&)action=individuelle(?:&|$)
                RewriteRule .* https://www.monsite.com/immeuble.html? [L,R=301]

                Dans le cas suivant j'ai bien une 301, mais arrivé sur la page de destination (www.monsite.com/immeuble.html) j'ai une erreur 404.

                RewriteEngine On
                 
                RewriteCond %{QUERY_STRING} !=""
                RewriteRule (?:^|/) https://www.monsite.com/immeuble.html? [L,R=301]





                • Partager sur Facebook
                • Partager sur Twitter
                  17 octobre 2018 à 17:13:04

                  Pour 1, pas possible sauf si le .htaccess n'était pas lu (ce qui n'est pas le cas) et penses à vider le cache de ton navigateur après chacun de tes tests.

                  Pour 2, ta règle est censée faire quoi ? Parce qu'elle doit +/- boucler ...

                  Après, tout ça, ce sont des redirections, pas des réécritures. Donc si tu obtiens une 404, c'est que /immeuble.html n'existe pas physiquement et n'est pas réécrite non plus (mais je ne sais pas ce que tu cherches à faire là).

                  -
                  Edité par julp 17 octobre 2018 à 17:25:00

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 octobre 2018 à 7:18:30

                    Je continue à chercher et à galérer. :)

                    Ce que je cherche à faire c'est donc de réécrire mes urls qui sont sous la forme monsite.com/?module=static&action=ancien en monsite.com/cecicela.hmtl.

                    Puis dans un sous de référencement et pour éviter le duplicate content, je voudrais rédiriger les anciennes url (monsite.com/?module=static&action=ancien) vers les url réécrites.

                    Quand j'essaye cela, la redirection fonctionne puisqu'en tapant monsite.com/?module=static&action=copro j'arrive sur monsite.com/copropriete.hmtl. mais la réécriture non puisque la page n'est pas trouvée.

                    RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
                    RewriteCond %{QUERY_STRING} (?:^|&)action=copro(?:&|$)
                    RewriteRule .* https://www.monsite.com/copropriete.html? [L,R=301] 

                    Quand j'essaye cela, la redirection pose problème, ERR_TOO_MANY_REDIRECTS  selon Chrome

                    RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
                    RewriteCond %{QUERY_STRING} (?:^|&)action=copro(?:&|$)
                    RewriteRule .* https://www.monsite.com/copropriete.html? [L,R=301] 
                    RewriteRule ^copropriete.html$   ?module=static&action=copro [L]

                    Par contre quand j'essaye cela, ca marche... mais la page de destination n'est pas la bonne évidemment.

                    RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
                    RewriteCond %{QUERY_STRING} (?:^|&)action=copro(?:&|$)
                    RewriteRule .* https://www.monsite.com/copropriete.html? [L,R=301] 
                    RewriteRule ^copropriete.html$   ?module=static&action=individuelle [L]

                    Bref suis je tourne en rond.





                    -
                    Edité par lodemars 18 octobre 2018 à 11:28:23

                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 octobre 2018 à 12:00:51

                      RewriteCond %{QUERY_STRING} (?:^|&)module=static(?:&|$)
                      RewriteCond %{QUERY_STRING} (?:^|&)action=copro(?:&|$)
                      RewriteRule ^(?:index\.php)?$ https://www.monsite.com/copropriete.html? [L,R=301]
                      
                      RewriteCond %{ENV:REDIRECT_STATUS} =""
                      RewriteRule ^copropriete\.html$ index.php?module=static&action=individuelle [L]
                      

                      PS : ces & sont toujours des &

                      -
                      Edité par julp 18 octobre 2018 à 12:06:54

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 octobre 2018 à 13:00:37

                        J'ai testé ca ne change rien. Je suis dans la même config que mon dernier exemple. Ce qui me semble logique puisque je veux être redirigé vers la page "action=corpo" et non "action=individuelle".

                        Si je change "individuelle" par "corpo" dans ta dernière ligne, je reviens à mon cas #2 ou le navigateur me dit qu'il y a un problème avec la redirection.

                        -
                        Edité par lodemars 18 octobre 2018 à 14:55:26

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Redirection 301 et site en MVC

                        × 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.
                        • Editeur
                        • Markdown