Question

J'ai construit un site Web (PHP) avec plus de 60 pages. Je n'ai maintenant réalisé (malheureusement) que j'ai construit dans une fonction « En mode de maintenance » pour permettre à un administrateur de désactiver temporairement le site et pointer vers une page en mode maintenance. Cela ne permettrait pas les utilisateurs connectés en tant qu'administrateur pour voir le site.

Les options que je vois sont:

  1. Ajouter un nouveau fichier "include" en haut de chaque page PHP unique.

  2. J'ai une comprennent qui est utilisé pour afficher la barre de navigation
    chaque page (classe de navigation). Je pourrais écrire le mode d'entretien
    code dans cette classe.

Dois-je d'autres options? La 1ère option ne semble pas le plus efficace, et le 2ème semble comme une mauvaise programmation. Y at-il autre meilleure façon d'inclure un nouveau fichier sur chaque fichier php?

Merci!

ps - le site n'a pas encore été lancé

Était-ce utile?

La solution

Vous pouvez utiliser .htaccess pour rediriger vers une autre page en mode maintenance sur.

Trois exemples divers:

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

« en 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] 

Rediriger à la page de maintenance lors de la mise à niveau à l'aide .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

mode Maintenance de apache

Autres conseils

Je sais que c'est une vieille question, mais j'ajoute ce pour les chercheurs futurs qui viennent dans cette page via la recherche.

J'utilise une redirection PHP.

En haut de chaque page ajoutez les lignes suivantes:

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

Et dans votre fichier config.php juste faire une variable comme si

$maintenance = 0; // turns maintenance mode off

Si vous voulez que votre site soit en mode maintenance il suffit de changer le « 0 » à « 1 ». Ceci permet de rediriger tous les visiteurs de votre site vers une page de maintenance.

Je tapais ce code assez rapide sans le tester, mais il devrait fonctionner.

auto_prepend_file chaîne

Indique le nom d'un fichier qui sera automatiquement ajouté avant le fichier principal. Le fichier est inclus comme si elle avait été avec la fonction require (), donc include_path est utilisé.

La valeur spéciale none désactive l'ajout automatique.

vous pouvez le configurer dans php.ini ou dans apache fichier hôte (virtuel) ou .htaccess avec php_flag auto_prepend_file file.php

[ou php_admin_flag (?)]

modifier

  • Peut-être que vous ne devriez pas mettre le fichier à inclure dans votre racine web dir ou un sous-dossier.
  • Et rappelez-vous d'appeler la sortie ou mourir à la fin.

Au lieu de spécifier les adresses IP, vous pouvez également vérifier contre HTTP_USER_AGENT dans un RewriteCond ..

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

Toute personne ayant « MyCrazyString » marqué sur la fin de leur chaîne de l'agent utilisateur du navigateur peut avoir accès, tout le monde obtient le mode de maintenance la page / site.

Tant que la haute sécurité n'est pas nécessaire, il est idéal; rapide et facile à diffuser admins, complètement portable, et surtout, ne cassera pas si vous vous reconnectez votre DSL quand le seul gars avec réelle l'accès au serveur est endormi à l'autre bout du monde.

; o) Co

La façon la plus simple serait de centraliser une partie de la logique en ce qui concerne la génération de site. De cette façon, vous pouvez activer le mode de maintenance et de rediriger les non admins vers une autre page. Ce ne serait pas difficile à faire, comme j'imagine que vous avez un code qui ne cesse d'apparaître dans tous les sens, afin d'étendre simplement la fonctionnalité de connexion pour vérifier une variable globale (si vous n'avez pas des variables globales communes à travers votre page vous pouvez simplement le mettre dans .htaccess via setenv).

Je pense que, expressions Apache standard sont plus facilement à comprendre que règles de réécriture .

Avant l'entretien renommer le fichier / home / coolcmd / site_maintenance_off / home / coolcmd / site_maintenance_on .

extrait de code pour /.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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top