|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
[WEB] Redirect verso nuovo sito mantendo url
Salve, vi posto il mio problema:
ho due domini, nuovosito.com (ho solo il nome, niente hosting) e vecchiosito.com (con anche hosting) e vorrei che le richieste su nuovosito.com venissero rimbalzate a vecchiosito.com Fino qui tutto ok, ci sono mille modi per farlo e 10mila topic a riguardo ovunque, però: - Mi serve che l'url finale resti quello di nuovo sito, ovvero ad esempio richieste: nuovosito.com/pagina1.html ---> vecchiosito.com/pagina1.html nuovosito.com/blabla ---> vecchiosito.com/blabla Il contenuto deve essere quello della pagina corrispondente di vecchosito, ma l'url nel browser deve restare quello di nuovosito, completo! - NON posso fare un redirect dns, altrimenti avrei già risolto - Gli altri redirect al massimo mi marcherano l'url sottostante, ovvero farebbero diventaure tutto nuovosito.com/pagina1.html ---> vecchiosito.com/pagina1.html nuovosito.com/blabla ---> vecchiosito.com/blabla ma nella barra degli indirizzi si continuerebbe a vedere unicamente nuovosito.com, senza percorsi! Esiste un modo per farlo? io nel nuovosito.com posso uppare qualche file. Pensavo ad esempio ad usare i socket in php e rimbarlzare la risposta, creando con l'htaccess la "struttura di directory e file" al volo per mantenere anche i percorsi. Qualcuno lo ha mai fatto o sa se esiste un modo per farlo più facilmente? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se puoi accedere via php ai socket allora puoi accedere anche ad internet direttamente tramite il comando file (ti legge per intero una pagina web, sempre che tu abbia accesso ai socket).
Crei una pagina php che non fa altro che andare a prendere il contenuto dell'url dell'altro sito che gli viene passato. Ad esempio: http://www.nuovosito.com/ o http://www.nuovosito.com/index.php deve andare a prendere la home page. http://www.nuovosito.com/index.php?path=/pagina1.html dovrà andare a prendere e visualizzare http://www.vecchiosito.com/pagina1.html Non è chiaramente quello che vuoi fare...ma con l'uso di mod_rewrite di apache fai corrispondere http://www.nuovosito.com/path/xyz.html a http://www.nuovosito.com/index.php?path=/path/xyz.html In questo modo aggiri il problema è ottieni il risultato voluto. Visualizzerai http://www.nuovosito.com/path/xyz.html nella barra del browser, ma eseguirai http://www.nuovosito.com/index.php?path=/path/xyz.html |
![]() |
![]() |
![]() |
#3 | |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Ti quoto quello che hai scritto modificandolo correttamente:
Quote:
Il problema sono i contenuti secondari, ad esempio se nella pagina vecchiosito.com/path/xzy.html c'è un <img src="/img/im.jpg"> questo viene "cercato" nel nuovosito e ovviamente non viene trovato. Lo stesso problema lo ho coi css e con gli script js. Dovrei praticamente far con curl uno scaricamento "globale" e creare le risorse "virtuali" sul nuovosito.com Tu sai come è possibile farlo? Nel senso che scandire una pagina html e vedere se ci sono risorse da scaricare a parte lo so fare, ma poi come le "propongo" all'utente? Nel senso che io ad esempio "/img/im.jpg" non la ho, ma posso procurarmela, il punto è come faccio a metterne il contenuto scaricato esattamente li? |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Domanda collaterale idiota: nuovosito e' tuo o di qualcun altro ? In ogni caso, su vecchiosito che tipo di hosting hai ? Su cosa puoi mettere mano ? Sembrerebbe il lavoro ideale per mod_proxy.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No, avevo scritto correttamente.
Ogni url viene trasformato da http://www.nuovosito.com/path/xyz.html a http://www.nuovosito.com/index.php?path=/path/xyz.html, quindi quando visualizzerai la pagina anche l'url http://www.nuovosito.com/img/im.jpg verrà riscritto in http://www.nuovosito.com/index.php?path=/img/im.jpg Quindi anche l'immagine verrà recuperata e visualizzata. Al massimo ci sarà da adattare il mime type... Ultima modifica di cionci : 25-08-2010 alle 18:59. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
readfile è una funzione più adatta di file. Trovi esempi su come settare il corretto mime type nella pagina di readfile nella documentazione di php.
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ecco qua un esempio su come usare mod_rewrite: http://www.logon2.com.au/blog/archiv...rite-tutorial/
Per determinare la pagina di vecchio sito da caricare, stampa $_SERVER['REQUEST_URI'] e capirai come viene composta la richiesta. A questo punto determini il mime type, stampi i vari header (come nell'help di readfile) e leggi il file remoto tramite readfile. In alcuni casi ci potrebbero essere problemi per la determinazione dei mime type, ma per un sito "tranquillo" non ci dovrebbero essere grossi prolemi. Ultima modifica di cionci : 25-08-2010 alle 19:27. |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Ti ringrazio veramente cionci, usando quel link ho fatto molto più velocemente di quello che stavo realizzando e funziona a meraviglia!
Posto il codice nel caso servisse a qualcun altro. File da mettere su nuovosito.com (niente hosting, solo nome dominio): -- file .htaccess -- Codice PHP:
Codice PHP:
In questo modo si ottiene - in modo completamente trasparente all'utente - tutto il contenuto di vecchiosito.com stampato su nuovosito.com, mantenendo i path e la struttura originale! Grazie ancora |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ho verificato anche io in locale e funziona anche in questo modo:
Codice PHP:
Il problema con i css c'è anche qui. Sinceramente trovo difficile capirne il perché. PS: la funzione header rende già in output il nuovo header |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi vengono in mente ora molte limitazioni. Principalmente alle richieste post ed ai coockies. In pratica con curl sarebbe possibile risolvere il problema, basterebbe duplicare tutti gli header (con getallheaders si ottengono tutti gli header) ed inviarli nella request tramite curl.
Poi ci sarebbero da gestire i cookies con dominio esplicito: bisogna cambiare il dominio sostituendo dove appare "vecchiosito", con "nuovosito" nel response header. In sostanza, per un sito statico va bene anche così, per un sito dinamico è difficile che basti. Ultima modifica di cionci : 26-08-2010 alle 15:24. |
![]() |
![]() |
![]() |
#12 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Si mi sono già accorto anche io di questi due problemi e li stavo sistemando.
Il problema del post lo ho sistemato aggiungendo: Codice PHP:
Se vuoi darmi una mano... ![]() Ultima modifica di alvinian : 26-08-2010 alle 14:57. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non conosco curl e la mia versione di php è compilata senza il supporto a curl. Non c'è il modo di trapiantare tutti gli header dalla richiesta che arriva a php a curl ?
Con getallheaders si dovrebbero ottenere tutti... In tal caso si risolverebbe automaticamente il problema del post. Per i cookies basterebbe fare una sostituzione nell'header ricevuto dal sito, se setta un cookie sostituisci "vecchiosito" a "nuovosito". |
![]() |
![]() |
![]() |
#14 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Scusa ma la getallheaders() prende gli header tra il mio client e il sito specchio che fa girare curl.
A me servono gli header che girano tra la richiesta curl e il sito vero con i contenuti. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se tu giri tutti gli header che ricevi alla richiesta HTTP verso la richiesta curl, salti a piè pari sia il problema del post che dei cookies nella direzione dal browser al vecchio sito.
Poi nei dati ricevuti da curl ti basta cercare negli header se vengono settati dei cookies. Se vengono settati cambi qualsiasi riferimento testuale a vecchiosito.it in nuovosito.it. Guarda qui come passa tutti gli header: http://www.php.net/manual/en/functio...topt.php#80271 |
![]() |
![]() |
![]() |
#16 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Si questo lo ho capito e sono in grando di rimbalzare gli header che girano tra client->curl verso la comunicazione curl->vecchiosito (usando la CURLOPT_HTTPHEADER, come mi hai appena linkato anche tu
![]() Il problema è capire gli header che ci sono tra vecchiosito->curl. Se vecchiosito mi imposta dei cookie su curl come faccio a intercettarli e poi infilarli dentro una setcookie verso il mio client? |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cerchi in quello che ti ritorna curl_exec...
Prima di tutto dovresti determinare la fine degli header, per evitare di cercare in tutto l'output (potrebbe essere anche un file ed avere dati binari). La fine degli header è determinata da una sequenza "\r\n\r\n". A questo punto estrapoli gli header e devi cercare un testo come questo: "\r\nSet-Cookie: " Cerchi fra la fine della stringa sopra ed il prossimo "\r\n", tutte le occorrenze di "vecchiosito.it" e le cambi in "nuovosito.it". Riaggiungi l'header alla risposta e prosegui. Ultima modifica di cionci : 26-08-2010 alle 17:02. |
![]() |
![]() |
![]() |
#18 |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Benissimo, ho quasi finito.
I cookie che il client mi manda li setto da curl verso vecchio sito cosi: Codice PHP:
Codice PHP:
Il Cookie: PHPSESSID=xxxxxx lo vedo girare correttamnete |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quelli che arrivano dal client non li devi toccare, vengono già selezionati dal client, non ci dovrebbe essere un campo domain da modificare.
Quindi passa direttamente tutti gli header a curl, pari pari. |
![]() |
![]() |
![]() |
#20 | |
Junior Member
Iscritto dal: Aug 2010
Messaggi: 17
|
Direi che ho finito.
Posto ancora il codice nel caso servisse a qualcun altro. Se gentilmente ci dai un'occhiata mi faresti anche un grande favore ![]() Codice PHP:
L'unico problema che fino ad ora ho riscontrato è che dal sito specchio non riesco a fare il login allo script piwik, mi torna: Quote:
Ultima modifica di alvinian : 27-08-2010 alle 04:05. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:04.