Newsgroup: it.comp.www.asp
Titolo: path relativi ed assoluti

ciao a tutti.
Sto sviluppando un sito con tecnologia ASP VBScripit (di cui però, lo
ammetto, son abbastanza ignorante)
Per fare le prove in locale uso WinXP Pro e IIS 5.1
Il sito andrà poi pubblicato su un server IIS6
In questo sito ho integrato un sistema che rileva e registra i clic dei
singoli utenti, con dei "a href=clicsrv.asp?url=PAGINADESIDERATA.XXX" mentre
la pagina clisrv.asp registra su un Database Access le voci indirizzo IP e
PAGINADESIDERATA.XXX.
riporto il codice di clisrv.asp
<%
url=Trim(Request.QueryString("url"))
ip=request.servervariables("remote_addr")
accessdb="mdb-database/clicks.mdb"
cn="DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" &
server.mappath(accessdb)
set rs = server.createobject("ADODB.Recordset")
sql = "insert into clicks (url,ip) values('"& url &"','"& ip &"')"
rs.open sql, cn
set rs=nothing
response.redirect url
%>
e tutto funziona bene, almeno finchè le pagine che contengono il riferimento
a clicsrv.asp?url=PAGINADESIDERATA.XXX sono nella root del sito, dove c'è
anche clicsrv.asp.
Quando invece dovessi inserire collegamento a
/clicsrv.asp?url=PAGINADESIDERATA.XXX
in una pagina che è in una sottocartella del sito,  poi ovviamente questo
non riesce + a reindirizzarmi alla pagina desiderata perchè questa non è
nella root del sito ma un una sottocartella.
a questo punto avrei 3 soluzioni:
1- modifico tutti i collegamenti a pagina desiderata con dei riferimenti
assoluti tipo "\SOTTOCARTELLA\PAGINADESIDERATA.HTM", ma è di realizzazione
molto difficoltosa perchè buona parte di qusti collegamenti sono creati in
modo dinamico dalle pagine asp che ho costruito.
2 - Rilevare automaticamente il path della pagina da cui arriva il clic
(pagina rilevata con Request.ServerVariables("HTTP_REFERER"))....
ma ......come si rileva il Path RELATIVO ALLA ROOT di quella pagina?
3 - copio in ogni sottocartella una copia di clicsrv.asp, ma devo
modificarle una per una in modo che si riferiscano alla corretta del DB
Access (a volte il riferimento sarà  "mdb-database/clicks.mdb", a volte
"../../mdb-database/clicks.mdb" e così via
In relazione alla soluzione 3, non posso nemmeno inserire un path assoluto
del tipo "/mdb-database/clicks.mdb" perchè la funzione Server.MapPath di IIS
5.1 lo rifiuta e vuole path relativi, (cosa che sarebbe invece raccomandata
in IIS6, che rifiuta invece i path contenenti ".." )
RIASSUMENDO   per chi ha avuto la pazienza di leggere finora:
a) come si rileva il Path di una pagina RELATIVO ALLA ROOT ?del sito?????
b) potrei usare invere il path relativo alla posizione fisica sul server?
ciao a tutti e grazie per i vs consigli.
[soluzione : installo IIS6, ma questa è un'altra storia...]
stefano

 3 - copio in ogni sottocartella una copia di clicsrv.asp [...]
No
Consiglio:
usa per esempio un'altra sever variable: HTTP_HOST
che ti restituisce il nome del tuo sito.....
in modo che il redirect lo fai cosě:
response.redirect  url = request.servervariables("HTTP_HOST") &  url
(attenzione a inserire "http://" e la barra "/" se mancano)
fammi sapere se hai avuto successo
Ciao
Mau


grazie mille" ci provo. in locale.
stefano

non ci sono riuscito
il problema si è aggravato quando mi sono ricordato che alcuni link sono di
questo  tipo
http://localhost/foto/clicsrv.asp?url=foto_main.asp?path=La_Sfinge_12.06.04/
IMG_0014.jpg
con un numero imprecisato di "/" anche nell'argomento del file richiamato,
perchi non riesco mai a definire il tutto.(potrei farlo spezzando la stringa
in base ai "?" e POI in base ai "/"....)
per il momento ho risolto inserendo un clicsrv.asp in ogni sottocartella
(per il  momento solo 2...) e modificandoli in modo da riferirsi alla
corretta posizione del database MDB
per quanto riguarda le differenze fra IIS5.1 e IIS6, ho risolto così
in locale (cioè se l'IP del server è = all'IP del client) => IIS5.1 => il
path è relativo
in remoto (cioè se l'IP del server è <> all'IP del client)=> IIS6 =>  il
path è assoluto
mille
grazie
ciao
stef

>
http://localhost/foto/clicsrv.asp?url=foto_main.asp?path=La_Sfinge_12.06.04
/IMG_0014.jpg
Questo non mi sembra corretto probabilmente è invece :
http://localhost/foto/clicsrv.asp?url=foto_main.asp&path=La_Sfinge_12.06.04/IMG_0014.jpg
(è ben diverso, invece del secondo ? hai un &)
ti devi rileggere i parametri presenti nella QueryString e ripassarli
all'url successivo... solo un po' di lavoro in più ma non impossibile
inoltre spero che tu faccia sempre un UrlEncode prima di costruire
url con caratteri particolari....
Ciao
Mau

 ha scritto nel messaggio
news:6yZTc.44069$OH4.1...@twister1.libero.it...

No, era giusto il secondo "?"  !!!
perchè l'argomento di url= è tutto
'foto_main.asp?path=La_Sfinge_12.06.04/IMG_0014.jpg'  !
fico, eh??
fotomain.asp processerà poi la variabile '
path=La_Sfinge_12.06.04/IMG_0014.jpg '
comunque per ora funziona. dopo aver inserito un certo numero di if ...then
....else !
non so che succederà nel caso il file oggetto di url= abbia a sua volta +
parametri.
in tal caso credo davvo che dovrei farli leggere a clicsrv.asp e poi
ri-passarli al file in oggetto... ma come???
non conosco a priori quanti e quali parametri utilizzerà il file oggetto di
url=....
grazie mille
L'URLEncode non lo conosco.  Cos'é??
cia
stef

> L'URLEncode non lo conosco.  Cos'é??
utilissimo:
http://www.devguru.com/Technologies/asp/quickref/server_urlencode.html
Ciao
Maurizio
(ci si risente a settembre)