5 votes

Tuckey urlRewriteFilter use-query-string="true" ne fonctionne pas ?

J'essaie d'utiliser Tuckey urlRewriteFilter pour réécrire toutes les URL vers https://, tout en préservant les paramètres de la chaîne de requête qui ont été ajoutés à l'URL. Mon fichier urlrewrite.xml ressemble actuellement à ceci

  <urlrewrite use-query-string="true">

<rule>
    <note>
        The rule means that requests to /test/status/ will be redirected to /rewrite-status
        the url will be rewritten.
    </note>
    <from>/test/status/</from>
    <to type="redirect">%{context-path}/rewrite-status</to>
</rule>

<rule match-type="regex">
   <condition type="header" operator="notequal" name="X-Forwarded-Proto">^HTTPS$</condition>
   <condition type="request-uri" operator="notequal">/station/StationPingServlet</condition>
   <condition type="request-uri" operator="notequal">/station/StudioPingServlet</condition>
   <from>^.*$</from>
   <to type="permanent-redirect" last="true">https://%{server-name}%{request-uri}</to>
</rule>

<outbound-rule>
    <note>
        The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
        the url /rewrite-status will be rewritten to /test/status/.

        The above rule and this outbound-rule means that end users should never see the
        url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
        in your pages.
    </note>
    <from>/rewrite-status</from>
    <to>/test/status/</to>
</outbound-rule>

Je pensais que use-query-string="true" permettrait d'y parvenir, donc

http://server.com/test.jsp?company=3&id=1

sera réécrit en

https://server.com/test.jsp?company=3&id=1

mais cela ne semble pas se produire. Ce qui se passe, c'est que

http://server.com/test.jsp?company=3&id=1

est réécrit comme suit

https://server.com/test.jsp

Est-ce que je fais quelque chose de mal ? Merci pour tout conseil.

8voto

vtor Points 4690

Desde version 4.0 il est possible d'utiliser qsappend attribut pour to propriété. La valeur de qsappend est par défaut faux, vous devez donc l'activer.

La solution peut donc être,

<rule match-type="regex">
   <from>^.*$</from>
   <to type="permanent-redirect" qsappend="true" last="true">https://%{server-name}%{request-uri}</to>
</rule>

UPDATE : Pour les versions inférieures à 4.0, vous pouvez utiliser ?%{query-string} à la fin de votre URL

<rule match-type="regex">
   <from>^.*$</from>
   <to type="permanent-redirect" last="true">https://%{server-name}%{request-uri}?%{query-string}</to>
</rule>

0voto

Jay Bengco Points 1

Essayez ceci :

<rule>
   <from>^(.*)$</from>
   <to last="true" type="permanent-redirect">https://%{server-name}$1</to>
 </rule>

Veillez à ajouter ' use-query-string="true" ' sur la balise urlrewrite

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X