PDA

Visualizza la versione completa : [JAVA] htaccess RewriteRule e servlet


abcd1000
27-03-2020, 13:50
ho inserito questa regola nel mio file htaccess

RewriteEngine on
RewriteRule /page$ /UrlServlet?page=$1


dopodichè chiamo il mio sito scritto in java con questo url

https://www.miosito.it/page21 (https://www.orogioielli.it/page21)

ma la richiesta non finisce a
UrlServlet
mi compare una pagina con scritto

Etat HTTP 404 - /page21

type Rapport d''état
message /page21
description La ressource demandée n''est pas disponible.
Apache Tomcat/7.0.82




sbaglio la regola che scrivo in htaccess?
ho provato a scrivere anche le regole
RewriteRule ^page$ https://www.miosito.it/UrlServlet?page=$1
RewriteRule /page$ https://www.miosito.it/UrlServlet?page=$1

ma ottengo sempre la solita pagina di errore

andbin
27-03-2020, 15:04
ho inserito questa regola nel mio file htaccess

RewriteEngine on
RewriteRule /page$ /UrlServlet?page=$1

sbaglio la regola che scrivo in htaccess?

Direi proprio di sì.
Non me ne intendo granché del .htaccess ma si tratta di espressioni regolari, e il $ descrive la fine del url, NON "lì c'è un numero".

Quindi semmai qualcosa del tipo (prova, io non ho modo di provare):

RewriteRule /page(\d+)$ /UrlServlet?page=$1

\d+ vuol dire "una o più cifre decimali" e ( ) definisce il gruppo 1 che poi si referenzia nel replace a destra con $1

Quindi /page123 dovrebbe diventare /UrlServlet?page=123

Tutto qui. Prova, non sono sicuro al 100% ma quasi ... ;)

P.S. ovviamente se si chiede /pageABC non funziona ... il \d+ fa anche da "filtro" in questo senso, solo numeri.

abcd1000
27-03-2020, 17:21
Direi proprio di sì.
Non me ne intendo granché del .htaccess ma si tratta di espressioni regolari, e il $ descrive la fine del url, NON "lì c'è un numero".

Quindi semmai qualcosa del tipo (prova, io non ho modo di provare):

RewriteRule /page(\d+)$ /UrlServlet?page=$1

\d+ vuol dire "una o più cifre decimali" e ( ) definisce il gruppo 1 che poi si referenzia nel replace a destra con $1

Quindi /page123 dovrebbe diventare /UrlServlet?page=123

Tutto qui. Prova, non sono sicuro al 100% ma quasi ... ;)

P.S. ovviamente se si chiede /pageABC non funziona ... il \d+ fa anche da "filtro" in questo senso, solo numeri.

Sei stato molto chiario, grazie
nel file access ho messo questa regola

RewriteRule /page(\d+)$ /UrlServlet?page=$1

ed ho chiamato il mio sito con
https://www.miosito.it/page1058

ma continua a darmi la stessa pagina di errore che puoi vedere al link
https://gyazo.com/f7dff344aa8029f3542546f878510d45

andbin
27-03-2020, 17:42
ma continua a darmi la stessa pagina di errore che puoi vedere al link
https://gyazo.com/f7dff344aa8029f3542546f878510d45
Domanda banale ... ma il modulo mod_rewrite di Apache è attivato? E c'è anche la configurazione per abilitare la lettura dei .htaccess ?

abcd1000
27-03-2020, 18:04
ok ho capito il problema
il file htaccess funziona con apache ed i siti in php
io ho un sito in java sotto tomcat, quindi devo inserire le regole da qualche altra parte

andbin
27-03-2020, 18:33
ok ho capito il problema
il file htaccess funziona con apache ed i siti in php
io ho un sito in java sotto tomcat, quindi devo inserire le regole da qualche altra parte
Un conto è avere Apache HTTPD che "gira" le richieste ad Apache Tomcat (non è così inusuale ... molti fanno così).
Un altro conto è avere solo Apache Tomcat. In questo caso ovviamente .htaccess, mod_rewrite ecc... di per sé non c'entrano nulla.

Con Tomcat, o usi nella webapp una libreria di url-rewrite (come la Tuckey, https://tuckey.org/urlrewrite/ ) che si interpone come "Filter" a tutte le request ma devi avere pieno "controllo" della webapp o altrimenti .... serve altro.

So che in Tomcat si può configurare un RewriteValve ma non ti so dire nulla di più, mai visto mai usato. Cerca info.

abcd1000
27-03-2020, 18:59
ok, sto usandola libreria tucky e devo implementare la regola che trasforma questo url che digita l'utente nel browser


http://miosito.com/prodotti/113/ita


in questo
http://miosito.com/mostra.php?sezione=prodotti&id=113&lang=ita


ed ho scritto la seguente regola


<rule>
<from>^/(.*)/(.*)/(.*).html$</from>
<to type="forward">
/UrlServlet?sezione=$1&amp;id=$2&amp;lang=$3
</to>
</rule>


invece se uno volesse questo tipo di url
http://miosito.it/page_1058_ita.html


bisogna scrivere quesa regola


<rule>
<from>^/(.*)_(.*)_(.*).html$</from>
<to type="forward">
/UrlServlet?page=$1&amp;productId=$2&amp;language=$3
</to>
</rule>




quindi il file urlwriter.xml diventa


<?xml version="1.0" encoding="utf-8"?>


<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">


<urlrewrite>


<rule>
<from>^/(.*)_(.*)_(.*).html$</from>
<to type="forward">
/UrlServlet?page=$1&amp;productId=$2&amp;language=$3
</to>
</rule>


</urlrewrite>




ho scritto questo post perchè magari può essere utile a qualcuno

Loading