2016-03-08 16 views
6

Sto cercando uno script che reindirizzi tutte le pagine di un sito Web a una pagina in cui si afferma che l'intero sito è chiuso di domenica per motivi religiosi.Come posso "chiudere" un sito Web solo la domenica

Dovrebbe reindirizzare solo di domenica. In tutti gli altri giorni della settimana il sito dovrebbe funzionare normalmente.

Mi piacerebbe farlo a livello di server in un file .htaccess o in uno script PHP.

potrei immaginare qualcosa di simile:

$day = date('w'); 
if ($day == 0) { // Sunday... 
    header("Location: http://www.domain.com/closedonsunday.html"); 
} 

risposta

1

È possibile ottenere la rappresentazione numerica del giorno della settimana con date() e per reindirizzare:

$day = date('N'); //1 (for Monday) through 7 (for Sunday) 
if($day == 7){ 
    header("Location: sunday_page.php"); 
} 

E 'abbastanza buono per farlo tramite PHP mettendo questo codice in cima alla tua intestazione.

1

Non lo farei con header poiché gli utenti, a seconda delle impostazioni del browser, potrebbero ottenere una copia cache della pagina in giorni diversi dal lunedì.

È possibile utilizzare include per eseguire lo script da un altro file. Nella parte superiore di ogni pagina aggiungere il seguente:

include 'path/to/closedonsunday.php'; 

E poi closedonsunday.php avrebbe un molto semplice controllo come:

if (date('w') == 0) { 
    /* ... message here ... */ 
    exit; 
} 

Il exit è la parte vitale qui come come si fermerà PHP morti.

Si dovrebbe anche fare attenzione con i fusi orari. Assicurati che l'orologio del tuo server sia impostato correttamente e che lo script sappia quale fuso orario dovrebbe usare!

+0

Ciao, Grazie mille, in particolare sull'impostazione della copia cache e dell'orologio del server. Immagino che mettere l'inclusione in cima ad ogni pagina sia una cosa abbastanza per un webshop con oltre 1.000 pagine. C'è una soluzione a pagina singola per quanto ti riguarda? – Anthony

+2

Dipende dalla progettazione dell'applicazione. Tendo ad avere sempre una singola istruzione "include" su ogni pagina, in modo che cose come l'autenticazione e le connessioni al database possano essere gestite in un'unica posizione (questa sarebbe una "soluzione a singola pagina"). Se hai> 1.000 pagine che al momento non includono "include", allora c'è molto lavoro per modificarle tutte. In tal caso l'approccio '.htaccess' in un'altra risposta qui sarebbe meno lavoro. – timclutton

1

A mio parere, è necessario utilizzare il file .htaccess. I valori di data e ora in .htaccess si presentano sotto forma

% {} TIME_XXXX

dove XXXX è il tipo di data o tempo che si desidera.

Nel caso in cui si desidera reindirizzare un URL generico a uno che contiene la data odierna, è possibile utilizzare:

RewriteRule^messaggi/oggi $/messaggi /% {TIME_YEAR} -% {TIME_MON} - % {} TIME_DAY

Ciò si tradurrebbe in/messaggi/oggi viene reindirizzato a qualcosa di simile a/messaggi/2015-08-27

Se si voleva reindirizzare una pagina dopo la data (e l'ora) è la password potresti usare qualcosa come il seguente, dove se la data è passata 9 il 27 agosto 2015 avverrà il reindirizzamento. Usiamo un semplice confronto numerico per trasformare la data in un numero intero e quindi confrontarla.

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR} >2015082709 
RewriteRule ^$ /destination/url.html [R=301,L] 

Nel tuo caso

RewriteCond %{TIME_WDAY} = 0 // condition 
RewriteRule URL on which you wants to redirect 

Per ulteriori esercitazione è possibile utilizzare il collegamento Tutorial e link 2

Se si vuole utilizzare modo PHP quindi utilizzare l'interruttore. Se in seguito vuoi reindirizzare in qualsiasi altro giorno, puoi gestirlo qui.

$day = date('N'); //1 for Monday , 2 for Tuesday ... 7 For Sunday 
//N is The ISO-8601 numeric representation of a day 
switch($day){ 
case 1: 
    header('location: site for Monday');break; 
case 2: 
    header('location: site link for Tuesday'); break; 
} 
. 
. 
case 7: 
header("Location: http://www.domain.com/closedonsunday.html"); break; 
default: 
    code to be executed if day is different from all labels; // it is not possible in this case :) 

}

+0

Grazie per il tuo tutorial su Htaccess. Ho ragione che reindirizzare il sito ogni domenica è arrivati ​​a questo: RewriteCond% {TIME_DAY} = 0 RewriteRule^$ /destination/url.html [R = 301, L] – Anthony

+1

No TIME_DAY rappresenta la data corrente. dovresti TIME_WDAY giorno della settimana corrente (0-6). – Deep

+0

è anche possibile utilizzare il caso interruttore. Switch è sempre meglio di If else conditions. – Deep

6

È possibile utilizzare la seguente regola in .htaccess:

RewriteEngine on 

#--if WDAY ==0--# 
RewriteCond %{TIME_WDAY} 0 

#--redirect the domain to /closedonsunday.html--# 
RewriteRule ^((?!closedonsunday\.html).*)$ /closedonsunday.html [L,R] 

La variabile %{TIME_WDAY} rappresenta il giorno della settimana (0-6).

Il codice sopra reindirizzerà tutte le richieste a /closedonsunday.html se la condizione è soddisfatta.

+0

Funziona! Eppure solo per la homepage non per tutte le pagine in una. Posso chiedere la tua guida qui? – Anthony

+1

@Anthony modifica il matcher regex in rewriteRule in modo che soddisfi le tue esigenze. Leggi la sintassi in [docs] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule) (ma è fondamentalmente solo pcre) –

+0

@ SáT Così ho fatto il las poche ore . Il risultato e 'migliore' è sempre 500 errori interni del server come ERR_TOO_MANY_REDIRECTS anche codice come Opzioni + FollowSymlinks RewriteEngine on RewriteCond% {} REQUEST_URI!/Closedonsunday $ RewriteRule $ /closedonsunday.html [R = 302, L] non sembra funzionare nella mia situazione. – Anthony