2012-11-11 7 views
5

In PHP, come posso verificare se la pagina corrente ha www nell'URL o no?Come verificare se URL della pagina ha www in esso o no con PHP?

E.g se l'utente è su http://www.example.com/something, come posso trovare che c'è www nell'URL e su http://example.com/something, www non è nell'URL?

+0

tenere a mente se si utilizza uno dei metodi indicati controllare per assicurarsi $ _SERVER [ 'HTTP_HOST'] esiste prima di fare qualsiasi cosa. if (isset ($ _ SERVER ['HTTP_HOST'])) Non tutti gli ambienti di hosting popoleranno quella variabile. Ho incontrato alcuni che non lo fanno. È consigliabile utilizzare sia HTTP_HOST sia SERVER_NAME per assicurarti di poter controllare un dominio. –

+0

@cryptic è sempre presente SERVER_NAME? –

+1

http://stackoverflow.com/questions/2297403/http-host-vs-server-name darà alcune buone informazioni su entrambi. Se il SERVER_NAME non è impostato su Apache, verrà eseguito un inversione della direzione sull'IP. Se il tuo dominio ha un IP dedicato, dovrebbe risolvere il problema per correggere il dominio, ma se si tratta di un IP condiviso, si corre il rischio che il dominio venga restituito come un dominio diverso. –

risposta

1
array_shift(explode(".",$_SERVER['HTTP_HOST'])); 

Dovrebbe funzionare, quindi esaminare la matrice per la presenza di www. Se stai semplicemente cercando di rimuovere o forzare www, allora una regola .htaccess è di gran lunga superiore a PHP per quel lavoro.

+0

HTTP_HOST include la parte www? Ho pensato che includesse solo il dominio .. Potrei sbagliarmi però –

+0

Il sottodominio è considerato parte dell'host, quindi sì, dovrebbe contenere www – Andrew

+1

Me semplicemente echo $ _SERVER ['HTTP_HOST']: http: // www. ferdiaobrien.com/quick.php –

3

Conosci già l'url? Dai questo:

<?php 
$parsed = parse_url("http://www.example.com/something"); 
$hasWww = strpos($parsed['host'], "www.") === 0; 
var_dump($hasWww); 

Altrimenti, prendere

strpos($_SERVER['HTTP_HOST'], "www.") === 0 
1

From the manual

$_SERVER['HTTP_HOST']

Contenuto del Host: intestazione dalla richiesta corrente, se c'è uno.

$_SERVER['SERVER_NAME']

Il nome del server host in base al quale lo script corrente è esecuzione. Se lo script è in esecuzione su un host virtuale, questo sarà il valore definito per quell'host virtuale.

6

si potrebbe fare una preg_match questo sarebbe:

if(preg_match('/www/', $_SERVER['HTTP_HOST'])) 
{ 
    echo 'you got www in your adress'; 
} 
else 
{ 
    echo 'you don not have www'; 
} 

si potrebbe anche farlo con .htaccess a seconda di cosa si sta costruendo l'opzione di cui sopra farebbe bene per un rilevamento simpel.

se si sceglie l'opzione Ferdia dato fare il controllo come segue:

$domain = array_shift(explode(".",$_SERVER['HTTP_HOST'])); 
if(in_array('www', $domain)) 
{ 
    echo 'JUP!'; 
} 
+1

La tua espressione regolare è sbagliata, e se avesse www da qualche parte alla fine della stringa dell'URL. Controlla questo: http://rubular.com/r/IEzoGnqEm1 – Matija

+0

La sua domanda era "www nell'URL", senza menzionare che dovrebbe essere all'inizio. Tuttavia, se si desidera solo abbinare il www all'inizio, la regex sarebbe:/^ www / –

11

È possibile utilizzare $_SERVER['HTTP_HOST'] per ottenere il vostro dominio. Ora, se il tuo sito non utilizza sottodomini è facile. Basta usare qualcosa di simile:

$url1 = "www.domain.com"; 
$params = explode('.', $url1); 

if(sizeof($params === 3) AND $params[0] == 'www') { 
    // www exists 
} 

Nota che se l'array params ha 2 voci, poi dominio assomiglia a questo domain.com e non c'è www chiaramente. È anche possibile controllare la dimensione dell'array $params e decidere se c'è www o meno in base alle sue dimensioni.

Ora se il tuo sito utilizza sottodomini, diventa più complicato. Avreste questi come possibili scenari:

$url1 = "www.domain.com"; 
$url2 = "www.sub.domain.com"; 
$url3 = "domain.com"; 
$url4 = "sub.domain.com"; 

allora si sarebbe di nuovo esplodere ogni url, e confrontare dimensioni e controllare se prima voce è 'www'. Tuttavia, il dominio secondario potrebbe essere denominato www dove il dominio www sarebbe il sottodominio: D E quindi sarebbe simile a questo: www.domain.com, e ancora, www è sottodominio :) Questo è pazzesco Sono quasi impazzito con questo :)

In ogni caso, per verificare la presenza di www quando il sito non utilizza i domini secondari, è il massimo. Ma per verificare se url ha www e il tuo sito utilizza sottodomini, potrebbe essere difficile. La soluzione più semplice per risolvere questo problema sarebbe disabilitare il dominio secondario www, se possibile.

Se hai bisogno di più aiuto e questo non risponde alla tua domanda, non esitare a chiedere. Avevo una situazione simile in cui gli utenti sarebbero stati in grado di creare i propri account che sarebbero sottodomini, come www.user.domain.com, e ho dovuto fare la stessa cosa.

Spero che questo aiuti!

1

Ci sono tanti modi per controllare se www contiene o no.

uno dei modi è:

if(strpos($_SERVER['HTTP_HOST'], `www`) !== false) { 
    echo "WWW found"; 
} else { 
    echo "WWW not found"; 
} 
Problemi correlati