2009-09-08 14 views
9

He creado un sitio web (PHP) con más de 60 páginas. Me acabo de dar cuenta (desafortunadamente) de que debería haber incorporado una función "En modo de mantenimiento" para permitir que un administrador deshabilite temporalmente el sitio web y lo dirija a una página de Modo de mantenimiento. Esto solo permitiría a aquellos que iniciaron sesión como administrador ver el sitio web.Cómo implementar el "Modo de mantenimiento" en el sitio web ya establecido

Las opciones que veo son:

  1. añadir un nuevo archivo "incluir" a la parte superior de cada página PHP.

  2. Tengo uno que se utiliza para mostrar la barra de navegación en
    cada página (clase de navegación). Podría escribir el código de Modo de mantenimiento
    en esta clase.

¿Tengo alguna otra opción? La primera opción no parece ser la más eficiente, y la segunda parece una mala programación. ¿Hay alguna otra forma mejor de incluir un nuevo archivo en cada archivo php?

Gracias!

ps - el sitio no se pone en marcha todavía

Respuesta

18

Puede utilizar .htaccess para redirigir a otra página, mientras que en modo de mantenimiento.

Tres ejemplos surtidos:

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 “Down For Maintenance” Page Redirect

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

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

Redirect to maintenance page during upgrade using .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 

Maintenance mode for apache

+1

Como se puede ver en los ejemplos se puede excluir algunas IP. –

+0

Parece una buena alternativa rápida. Espero encontrar otros métodos que puedan ser más escalables para que cada vez que tenga un nuevo administrador, no tenga que actualizar el archivo .htaccess e ingresar su IP. Sin embargo, ¿me estoy poniendo un poco por delante? Para el próximo año, probablemente no tendré muchos administradores nuevos. Tal vez implementar una solución rápida y simple de .htaccess por ahora funcionaría hasta que realmente necesite implementar el método robusto. ¿Qué piensan ustedes? ¿Es mejor construirlo de la manera "correcta" en este momento? ¿O simplemente hazlo de la manera más fácil hasta que tenga que hacerlo más complejo? – justinl

+0

Esto requiere que conozca las direcciones IP de todos los administradores ... – OIS

0

El La forma más simple sería centralizar parte de la lógica con respecto a la generación del sitio. De esta forma, puede activar el modo de mantenimiento y redirigir a los que no sean administradores a una página diferente. Esto no sería difícil de hacer, ya que imagino que tiene algún código que sigue apareciendo por todas partes, así que simplemente amplíe la funcionalidad de inicio de sesión para buscar una variable global (si no tiene variables globales comunes en su página). puedes simplemente configurarlo en .htaccess vía setenv).

3

auto_prepend_file cadena

Especifica el nombre de un archivo que es interpretado automáticamente antes del archivo principal. El archivo se incluye como si se llamara con la función require(), por lo que se usa include_path.

El valor especial none deshabilita el autoprepagado.

Es posible ajustar esta en php.ini, o en el archivo de Apache (virtual) de host o .htaccess con archivo.php php_flag auto_prepend_file

[o php_admin_flag (?)]

edición

  • Tal vez no debería poner el archivo de inclusión, en su tela directorio raíz o una carpeta secundaria.
  • Y recuerde llamar a la salida o morir al final.
+1

Y puede agregar 'exit;' en algún lugar al final para evitar que el resto del código se analice. – alex

+0

@alex: sí. no debe suponer que las personas saben sobre la salida solo porque tienen más de 60 páginas de php. : I – OIS

+1

jaja sí, gracias. Es fácil crear muchos archivos y no saber realmente qué es lo que está haciendo aún: P – justinl

6

Sé que esta es una pregunta anterior pero la estoy agregando para los buscadores futuros que se encuentran con esta página mediante la búsqueda.

Uso un redireccionamiento de PHP.

En la parte superior de cada página añadir las siguientes líneas:

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

Y en su archivo config.php simplemente hacer una variable al igual que

$maintenance = 0; // turns maintenance mode off 

Cuando usted quiere que su sitio sea en el modo de mantenimiento simplemente cambia el "0" a "1". Esto redirigirá a todos los visitantes de su sitio a una página de mantenimiento.

Escribí ese código bastante rápido sin probarlo, pero debería funcionar.

+1

Bueno, no funcionará, su encabezado carece de un apóstrofo. De lo contrario, pensé en la misma idea, pero htaccess se ve mucho mejor para grandes sitios –

+0

Recuerde limpiar todos los códigos byte relacionados con config.php https://ma.ttias.be/how-to-clear-php-opcache/ –

2

En lugar de especificar direcciones IP, también se puede comprobar en contra HTTP_USER_AGENT en un RewriteCond ..

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

Cualquier persona con "MyCrazyString" etiquetado en el extremo de la cadena de agente de usuario del navegador puede acceder, todos los demás se la página/sitio de modo de mantenimiento.

Mientras no se requiera alta seguridad, es ideal; Rápido y fácil de diseminar a los administradores, completamente portátil, y lo que es más importante, no se romperá si vuelve a conectar su DSL cuando el único tipo con acceso real al servidor está dormido al otro lado del mundo.

; o) Cor

0

pienso, standard Apache expressions son más fácilmente de entender que rewrite rules.

Antes de mantenimiento cambio el nombre de archivo /home/coolcmd/site_maintenance_off a /home/coolcmd/site_maintenance_on.

fragmento de código para /.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> 
Cuestiones relacionadas