Redirect un url specifico

Salve ragazzi,

ho necessità di reindirizzare un url come il seguente:

miosito.it/?category=File-Sharing

alla pagina 404.html

dato che il sito è cachato (il controller non viene letto) e quindi
esiste la pagina index.html quando si richiede la pagina:

miosito.it/?category=File-Sharing

appare index.html

il redirect con htaccess non lo riesco a fare e neppure il supporto.

Qualcuno sa propormi una soluzione, utilizzando ad esempio il routes.rb?

Grazie infinite!!!

Luigi

Se fosse rails 3.0, su routes.rb possibile fare il redirect.
Dovrebbe essere qualcosa di simile a questo

match “/:something”, :to => redirect(“/404”)

Nel caso in cui non fosse possibile, allora userei direttamente
redirect_to all’interno dell’action, cos da forzarla.

redirect_to(some_path)

Altrimenti, soluzione un p sporca, io ci metterei pure un redirect
fatto in Javascript nella pagina. E’ proprio l’ultima delle possibilit,
ma funziona :slight_smile:

In ogni caso, se vuoi dei comportamenti dinamici, forse ti conviene
portare la pagina index.html “dentro rails”, cos puoi sfruttare anche
le actions e le logiche che ci puoi metter dentro.

2010/11/14 Luigi M. [email protected]

esiste la pagina index.html quando si richiede la pagina:

Luigi


Posted via http://www.ruby-forum.com/.


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Andrea R.

Ecco la soluzione sporca intanto

Per il discorso della index.rhtml, in ogni caso passa per un controller.
All’interno del controller ci sar un metodo (action) che fa pi o meno

def index

do some stuff

end

All’interno di tale action, tu puoi modificare la logica applicativa, e
nel
caso fare anche un redirect con qualcosa del tipo. Questa logica si basa
sul modello MVC.

def index
redirect_to(“some_path”)
end

Bye

2010/11/14 Luigi M. [email protected]

Andrea perdona la mia ignoranza ma non riesco a capire come posso
utilizzare la soluzione JS.

Ti prego di essere più elementare.

Grazie moltissimo

Grazie mille per la risposta, però puoi spiegarmi un pochino meglio?

Non uso rails 3 quindi non posso sfruttare il comando da te suggerito.

Non ho capito che cosa intendi per:

----"Nel caso in cui non fosse possibile, allora userei direttamente
redirect_to all’interno dell’action, cos da forzarla.

redirect_to(some_path)—"

L’action non vorrei dire fesserei ma non viene presa in considerazione
perché la vista index.rhtml è cachata e quindi il controller non viene
proprio interrogato.

Parlo della index.rhtml perché è lì che veniva fatta l’interrogazione:

?category=File-Sharing che adesso con il routes è diventata:

http://www.software-windows.net/lista/software/file-sharing.html

Mi suggerisci, per piacere, anche la soluzione “sporca” con JS che ho
ncessità di risolvere sto problema.

Grazie infinite

SEI UN GRANDE, GRAZIE!!!

Io sapevo che l’alternativa era anche il file .htaccess ma poiché avevo
chiesto aiuto in proposito al supporto del mio webhosting il quale mi
aveva detto che non si poteva risolvere il problema con l’.htaccess ma
solo con la programmazione, non avevo neppure postato la domanda…

…vatti a fidare.

Ho aggiunto le righe da te suggerite a quelle che avevo già il risultato
è il seguente:
ErrorDocument 404 /404.html
RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://www.software-windows.net/404.html [R=404,L]
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

è tutto corretto oppure c’è qualche cosa che non va?

Mi sai anche dire come si impone il RewriteCond qualsiasi sia la stringa
dopo category=

Grazie mille

Ciao Luigi,
se usi apache puoi creare un file .htaccess nella directory public
contenente:

RewriteEngine On
ErrorDocument 404 /404.html
RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://example.com/404.html [R=404,L]

dove naturalmente example.com è il tuo sito.

PS: usa example.com ( o .net o .org) per gli esempi (vedi RFC 2606
sezione 3 per maggiori info)


Duilio R.
http://sinetris.info

Grazie mille!

PS.: che significa:

“ricorda sempre di usare example.com etc. etc. ;)”

Ciao Luigi,

Luigi M. wrote in post #961635:

Io sapevo che l’alternativa era anche il file .htaccess ma poiché avevo
chiesto aiuto in proposito al supporto del mio webhosting il quale mi
aveva detto che non si poteva risolvere il problema con l’.htaccess ma
solo con la programmazione, non avevo neppure postato la domanda…

…vatti a fidare.

Hehehehe, capita :wink:
Comunque per questo tipo di cose, l’uso di mod_rewrite nel file
.htaccess di solito è la scelta ovvia.

Ho aggiunto le righe da te suggerite a quelle che avevo già il risultato
è il seguente:
ErrorDocument 404 /404.html
RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://www.software-windows.net/404.html [R=404,L]
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

è tutto corretto oppure c’è qualche cosa che non va?

In linea di massima è corretto.
Ma dipende da cosa vuoi fare :wink:
Alla fine del post ti metto un esempio completo.

Esaminiamo cosa abbiamo:

ErrorDocument 404 /404.html

qui diciamo che quando abbiamo un errore 404 deve mostrare la pagina
/404.html

RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://example.net/404.html [R=404,L]

se la pagina richiesta è Example Domain (e
SOLO questa) allora ritorna un errore 404 e mostra la pagina 404.html

RewriteRule ^$ index.html [QSA]

quando si richiede http://example.net/ prova a leggere
Example Domain

RewriteRule ^([^.]+)$ $1.html [QSA]

per ogni richiesta (ad esempio http://example.net/about) prova a
caricare la pagina html (ad esempio http://example.net/about.html)
In RoR si usa quando salvi le pagine di cui fai la cache in public.

RewriteCond %{REQUEST_FILENAME} !-f

se il file richiesto non esiste

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

invia la richiesta a dispatch.fcgi

Mi sai anche dire come si impone il RewriteCond qualsiasi sia la stringa
dopo category=

alla fine si tratta semplicemente di espressioni regolari (cerca regexp
per maggiori informazioni)

se ad esempio vuoi che tutte le pagine che contengono la query string
“category=File-Sharing” (anche se è in mezzo ad altro) allora andrai ad
usare:

RewriteCond %{QUERY_STRING} ^(.&)?category=File-Sharing(&.)?$
RewriteRule ^(.*)$ http://example.net/404.html [R=404,L]

e riguardo la tua domanda, la risposta è:

RewriteCond %{QUERY_STRING} ^(.&)?category=(.)(&.)?$
RewriteRule ^(.
)$ http://example.net/404.html [R=404,L]

Quindi io userei un file .htaccess fatto così:

file .htaccess

abilito gli handler cgi e fcgi

in base ai moduli installati

AddHandler fastcgi-script .fcgi AddHandler fcgid-script .fcgi AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI

abilito RewriteEngine

RewriteEngine On

errori 404 alla pagina 404.html

ErrorDocument 404 /404.html

errori 500 alla pagina 500.html

ErrorDocument 500 /500.html

se esiste il file “system/maintenance.html”

allora il sito è in manutenzione (503)

ErrorDocument 503 /system/maintenance.html
RewriteCond %{REQUEST_URI} !.(css|gif|jpg|png)$
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ - [redirect=503,last]

se la query string contiene “category=” dai errore 404

RewriteCond %{QUERY_STRING} ^(.&)?category=(.)(&.)?$
RewriteRule ^(.
)$ http://example.net/404.html [R=404,L]

da / a /index.html

RewriteRule ^$ index.html [QSA]

controlla pagine cached

RewriteRule ^([^.]+)$ $1.html [QSA]

altrimenti se il file non esiste

RewriteCond %{REQUEST_FILENAME} !-f

invia il tutto a dispatch.fcgi

(aggiunto anche supporto HTTP Authentication)

RewriteRule ^(.*)$ dispatch.fcgi
[E=X-HTTP_AUTHORIZATION:%{HTTP:Authorization},QSA,L]

la RewriteRule sopra va su una sola riga :wink:

Grazie mille

Di nulla :wink:

Spero di non aver fatto errori.

PS: ricorda sempre di usare example.com etc. etc. :wink:


Duilio R.
http://sinetris.info

Ciao Luigi

Grazie mille!

Di nulla :wink:

PS.: che significa:

“ricorda sempre di usare example.com etc. etc. ;)”

Come avevo scritto in un commento precedente:

usa example.com ( o .net o .org) per gli esempi (vedi RFC 2606
sezione 3 per maggiori info)

I siti example.com, example.net ed example.org sono creati apposta per
essere usati negli esempi (in modo da non far arrivare dati strani ad
altri siti erroneamente e per non recare disturbo).
Ultimamente è stato aggiunto anche example.edu


Duilio R.
http://sinetris.info