Domanda

Ho costruito un sito web (PHP) con più di 60 pagine. Ho capito solo ora (purtroppo) che avrei costruito in un "in manutenzione" funzionalità per consentire un amministratore di disabilitare temporaneamente il sito e puntarlo a una pagina Modalità di manutenzione. Ciò consentirebbe solo quelli loggato come amministratore per visualizzare il sito web.

Le opzioni che vedo sono:

  1. Aggiungi un nuovo "include" file nella parte superiore di ogni singola pagina PHP.

  2. Ho uno comprendono che viene utilizzato per visualizzare la barra di navigazione sul
    ogni pagina (classe di navigazione). Potrei scrivere il
    modalità di manutenzione il codice in questa classe.

Devo tutte le altre opzioni? La prima opzione non sembra come il più efficiente, ed il 2 ° sembra proprio come cattiva programmazione. C'è un altro modo migliore per includere un nuovo file su ogni singolo file php?

Grazie!

ps - il sito non è stato ancora lanciato

È stato utile?

Soluzione

È possibile utilizzare .htaccess per reindirizzare a un'altra pagina mentre su modalità di manutenzione.

Tre esempi assortiti:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule ^(.*)$ http://domain.com/maintenance.html [R=307,L]

.htaccess “fuori servizio per manutenzione” pagina di reindirizzamento

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$ 
RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888

RewriteRule $ /maintenance.html [R=302,L] 

reindirizzamento alla pagina di manutenzione durante l'aggiornamento utilizzando .htaccess

# redirect all visitors to alternate site but retain full access for you
ErrorDocument 403 http://www.alternate-site.com
Order deny,allow
Deny from all
Allow from 99.88.77.66

modalità di manutenzione per apache

Altri suggerimenti

So che questa è una vecchia questione, ma io sono l'aggiunta di questo per i ricercatori futuri che arrivano attraverso questa pagina tramite la ricerca.

Io uso un redirect PHP.

Nella parte superiore di ogni pagina aggiungere le seguenti righe:

<?php
include('PATH/TO/FILE/config.php');
if(maintenance == 1) {
header('Location: http://example.com/maintenance.php');
}
else {
// do nothing
}
?>

E nel file config.php solo fare una variabile in questo modo

$maintenance = 0; // turns maintenance mode off

Quando si desidera che il sito sia in modalità di manutenzione basta cambiare il "0" a "1". Questo reindirizzare tutti i visitatori del sito a una pagina di manutenzione.

ho scritto che il codice piuttosto veloce senza prove ma dovrebbe funzionare.

auto_prepend_file stringa

Specifica il nome di un file che viene analizzato automaticamente prima che il file principale. Il file è incluso come se fosse chiamato con la funzione require (), in modo da include_path viene utilizzato.

Il valore speciale none disabilita la funzione.

è possibile impostare questa in php.ini, o in apache (virtuale) del file host o .htaccess con php_flag auto_prepend_file file.php

[o php_admin_flag (?)]

modifica

  • Forse non si dovrebbe mettere il file nella root directory web o una sottocartella includono.
  • E ricordarsi di chiamare uscita o morire alla fine.

Invece di specificare gli indirizzi IP, si potrebbe anche verificare contro HTTP_USER_AGENT in un RewriteCond ..

RewriteCond %{HTTP_USER_AGENT} !MyCrazyString
RewriteCond %{THE_REQUEST} !upgrade\.txt
RewriteRule .* /upgrade.txt [R=307,L]

Chiunque con "MyCrazyString" etichettato sulla fine della stringa User Agent del browser in grado di ottenere l'accesso, tutti gli altri ottiene la pagina di modalità di manutenzione / sito.

Finché alta sicurezza non è richiesto, è l'ideale; veloce e facile da diffondere per gli amministratori, completamente portatile, e, soprattutto, non si rompe se si ricollega l'DSL quando l'unico ragazzo con reale accesso al server è addormentato al dall'altra parte del mondo.

; o) Cor

Il modo più semplice sarebbe quella di centralizzare alcuni dei logica per quanto riguarda la generazione del sito. In questo modo si potrebbe trasformare la modalità di manutenzione su e reindirizzare eventuali non amministratori a una pagina diversa. Questo non sarebbe difficile da fare, come ho immaginate di avere un codice che continua a spuntare in tutto il luogo, quindi basta estendere la funzionalità di accesso per verificare la presenza di una variabile globale (se non si dispone di alcuna variabile globali comuni in tutta la tua pagina si può solo metterlo in .htaccess via setenv).

Credo che, espressioni standard di Apache più facilmente a capire che riscrivere le regole .

Prima di manutenzione a rinominare file / home / coolcmd / site_maintenance_off a / home / coolcmd / site_maintenance_on .

Snippet di codice per /.htaccess:

# If file, directory or symlink /home/coolcmd/site_maintenance_on exists,
# and requested file is not /maintenance.html,
# and not an admin's IP...
<If "-e '/home/coolcmd/site_maintenance_on' && %{REQUEST_URI} != '/maintenance.html' && %{REMOTE_ADDR} != '111.111.111.111'">
# Generate status code 503 for URL beginning with /, in other words for ANY URL.
# This is not "the real redirection 3xx".
Redirect 503 "/"
# This page handles status code 503. All external resources used by page
# (for example, maintenance.css), if any, must be added to <if> above.
ErrorDocument 503 /maintenance.html
# Maintenance probably will end in 10 minutes.
Header set Retry-After 600
</If>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top