🔎 Come trovare l’URL della pagina corrente in PHP

🔎 Come trovare l’URL della pagina corrente in PHP

Determinare l’URL della pagina corrente Γ¨ una delle richieste piΓΉ frequenti da parte dei webmaster, e questo perchΓ¨ non esiste (e non puΓ² esistere per almeno tre ragioni) una funzione che possa determinarlo in un colpo solo.

Si tratta, come vedremo, di usare le funzioni del PHP che forniscano i vari pezzi ed assemblarli, in seguito, mediante concatenazione di stringhe.

Il motivo per cui non esiste in PHP puro ua funzione per determinare l’URL corrente Γ¨ legata a tre aspetti:

  1. la configurazione del server, che potrebbe fornireΒ  o meno questa informazione;
  2. il server usato (NGINX o Apache), in quanto le funzioni per accedervi sono diverse;
  3. il valore di alcune variabili apparentemente lato server puΓ² cambiare in base al browser ed alla posizione del client.

Anzitutto, Γ¨ necessario tenere presente che un URL Γ¨ definito in genere come segue:

[protocollo]://[host][path][parametri]

ovvero quattro β€œpezzi” distinti tra loro, che rappresentano:

  1. il [protocollo] che Γ¨ solitamente FTP, HTTP oppure le sempre piΓΉ diffuse HTTPS;
  2. l’ [host] ad esempio miosito.com oppure ftp.prova.abc;
  3. il [path] cioè quello che definisce le funzionalità di accesso alle pagine (directory e/o file);
  4. i [parametri] che corrispondono a quelli passati via $_GET[β€˜β€¦β€™] in PHP.

Ecco perchΓ¨ un primo modo per determinare l’URL corrente, ad esempio in fase di sviluppo su localhost, Γ¨ il seguente:

$actual_link ="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"

dove in sostanza memorizziamo nella variabile $actual_link (da definire solitamente nell’header dei nostri file) l’host del sito e l’URI della richiesta. Non sempre pero’ questo approccio funziona, proprio perchΓ¨ da’ per scontato che il programmatore possa conoscere il protocollo usato a priori: in particolare, questo diventa complicato nel caso di connessioni HTTPS miste con HTTP e/o FTP.

Altre soluzioni sono difficili da universalizzare, bisogna tenere presente queste indicazioni di massima.

Per ottenere il nome del server Γ¨ possibile sfruttare la variabile SERVER_NAME, che Γ¨ una soluzione molto flessibile pero’ lega il nome del server alla configurazione sulla macchina, col risultato che ciΓ² che funziona oggi su localhost potrebbe smettere di funzionare una volta messo in produzione. Similmente, sfruttando HTTP_HOST si ottiene un host comprensivo della porta di accesso (che Γ¨ la 80 di norma, ma potrebbe cambiare su configurazioni particolari, DMZ o reti private).

Esempio:

  • $_SERVER[β€˜HTTP_HOST’] β€”β€”> β€˜localhost:8080’
  • $_SERVER[β€˜SERVER_NAME’] β€”β€”> β€˜localhost’

Altre variabili che possono aiutare a comporre il vostro URL sono:

  • $_SERVER[β€˜REQUEST_URI’] che fornisce solo il nome del file (ad es. /index.html) e
  • $_SERVER[β€˜QUERY_STRING’] che invece fornisce β€œtutto quello che c’è” dopo il punto interrogativo (?) nell’URL.

Per determinare, su questa falsariga, se la pagina corrente Γ¨ la home page o meno (in WP c’è giΓ  una funzione cosΓ¬, qui immaginiamo di dovercela fare da zero), potete sfruttare le espressioni regolari:

function is_home() { $url =Β http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]; return preg_match("/home.php/", $url); }

se invece c’è un singolo file index.php con varie action o pagine ammissibili via $_GET, un’idea potrebbe essere quella di salvare le action ed i vari request URI all’interno di un array statico, e poi verificare se l’URL sia presente o meno in quell’array, del tipo:
function is_home(){
global $actions;
$link = current_page();

foreach ( $actions as $s ){
if ( $s!=”” && preg_match(β€œ/$s/”,$link) )
return false; //…è una pagina intermedia
}
//…è la home
return true;
}

(fonti:Β Stackoverflow, SO, Apache)

 

0 voti

Guarda anche


Informazioni sull'autore

Salvatore Capolupo

Consulente SEO, ingegnere informatico e fondatore di Trovalost.it, Pagare.online, Lipercubo.it e tanti altri. Di solito passo inosservato e non ne approfitto.