2009-09-08 24 views
9

Tôi đã xây dựng một trang web (PHP) với hơn 60 trang. Tôi mới chỉ nhận ra (thật không may) rằng tôi nên có được xây dựng trong một "Trong chế độ bảo trì" tính năng để cho phép một quản trị viên để tạm thời vô hiệu hóa các trang web và trỏ nó đến một trang chế độ bảo trì. Điều này sẽ chỉ cho phép những người đăng nhập với tư cách quản trị viên để xem trang web.Cách triển khai "Chế độ bảo trì" trên trang web đã được thiết lập

Các tùy chọn tôi thấy là:

  1. Thêm mới "bao gồm" tập tin để phía trên cùng của mỗi trang PHP duy nhất.

  2. Tôi có một bao gồm được sử dụng để hiển thị thanh điều hướng trên
    mọi trang (lớp điều hướng). Tôi có thể viết mã Bảo trì
    trong lớp học này.

Tôi có tùy chọn nào khác không? Tùy chọn thứ nhất có vẻ không hiệu quả nhất và tùy chọn thứ 2 dường như là chương trình không tốt. Có cách nào khác tốt hơn để bao gồm một tập tin mới trên mỗi tập tin php duy nhất?

Cảm ơn!

ps - trang web không được đưa ra chưa

Trả lời

18

Bạn có thể sử dụng .htaccess để chuyển hướng đến một trang khác trong khi trên Chế độ bảo trì.

Ba ví dụ các loại:

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

Như bạn có thể thấy trong các ví dụ bạn có thể loại trừ một số IP. –

+0

Điều đó trông giống như một lựa chọn thay thế nhanh chóng. Tôi hy vọng tìm các phương thức khác có thể mở rộng hơn để mỗi lần tôi có một quản trị viên mới, tôi không phải cập nhật tệp .htaccess và nhập vào IP của chúng. Có lẽ tôi nhận được một chút để đi trước bản thân mình mặc dù? Trong năm tới tôi có lẽ sẽ không có rất nhiều quản trị viên mới. Có lẽ việc triển khai sửa lỗi .htaccess đơn giản nhanh chóng hiện sẽ hoạt động cho đến khi tôi thực sự cần triển khai phương pháp mạnh mẽ. các bạn nghĩ sao? Tốt hơn là xây dựng nó theo cách "thích hợp" ngay bây giờ? Hoặc chỉ cần làm một cách dễ dàng cho đến khi tôi cần phải làm cho nó phức tạp hơn? – justinl

+0

Điều này yêu cầu bạn phải biết địa chỉ IP của tất cả quản trị viên ... – OIS

0

Các cách đơn giản nhất là tập trung một số logic về việc tạo trang web. Bằng cách này, bạn có thể bật chế độ bảo trì và chuyển hướng bất kỳ quản trị viên nào đến một trang khác. Điều này sẽ không khó, vì tôi cho rằng bạn có một số mã sẽ xuất hiện khắp nơi, vì vậy bạn chỉ cần mở rộng chức năng đăng nhập để kiểm tra biến toàn cục (nếu bạn không có bất kỳ biến toàn cầu phổ biến nào trên trang của mình bạn có thể đặt nó vào .htaccess thông qua setenv).

3

auto_prepend_file chuỗi

Chỉ định tên của một tập tin được tự động phân tích trước các tập tin chính. Tệp được bao gồm như thể nó được gọi với hàm require(), vì vậy include_path được sử dụng.

Giá trị đặc biệt không vô hiệu hóa tính năng tự động thêm trước.

bạn có thể thiết lập này trong php.ini, hoặc trong apache (ảo) file host hoặc .htaccess với php_flag auto_prepend_file file.php

[hoặc php_admin_flag (?)]

chỉnh sửa

  • Có lẽ bạn không nên đặt bao gồm tập tin trong thư mục gốc web của bạn hoặc một thư mục phụ.
  • Và hãy nhớ gọi thoát hoặc chết ở cuối.
+1

Và bạn có thể thêm 'exit;' ở đâu đó để dừng phần còn lại của mã của bạn khỏi bị phân tích cú pháp. – alex

+0

@alex: có. không nên cho rằng mọi người biết về lối thoát chỉ vì họ có hơn 60 trang php. : Tôi – OIS

+1

haha ​​yes cảm ơn. Thật dễ dàng để tạo nhiều tệp và không thực sự biết bạn đang làm gì: P – justinl

6

Tôi biết đây là câu hỏi cũ nhưng tôi đang thêm câu hỏi này cho những người tìm kiếm trong tương lai tìm thấy trang này thông qua tìm kiếm.

Tôi sử dụng chuyển hướng PHP.

Ở phía trên cùng của mỗi trang thêm những dòng sau đây:

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

Và trong file config.php của bạn chỉ cần thực hiện một biến như vậy

$maintenance = 0; // turns maintenance mode off 

Khi bạn muốn trang web của bạn để được ở chế độ bảo trì chỉ thay đổi "0" thành "1". Điều này sẽ chuyển hướng tất cả khách truy cập trang web của bạn đến một trang bảo trì.

Tôi đã nhập mã đó khá nhanh mà không cần thử nghiệm nhưng nó sẽ hoạt động.

+1

Vâng, nó sẽ không hoạt động, tiêu đề của bạn thiếu một dấu nháy đơn. Khác, tôi nghĩ về cùng một ý tưởng nhưng htaccess trông tốt hơn cho các trang web lớn –

+0

Hãy nhớ để làm sạch tất cả bytecodes liên quan đến config.php https://ma.ttias.be/how-to-clear-php-opcache/ –

2

Thay vì chỉ định địa chỉ IP, bạn cũng có thể kiểm tra chống HTTP_USER_AGENT trong một RewriteCond ..

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

Bất cứ ai có "MyCrazyString" gắn thẻ vào cuối chuỗi User Agent của trình duyệt của họ có thể truy cập, những người khác được trang/trang chế độ bảo trì.

Vì vậy, miễn là bảo mật cao là không cần thiết, nó lý tưởng; nhanh chóng và dễ dàng để phổ biến cho quản trị viên, hoàn toàn di động và quan trọng, sẽ không bị ngắt nếu bạn kết nối lại DSL khi người duy nhất có quyền truy cập máy chủ thực tế đang ngủ ở phía bên kia của thế giới.

; o) Cor

0

Tôi nghĩ rằng, standard Apache expressions là dễ dàng hơn để hiểu hơn rewrite rules.

Trước khi bảo trì tôi đổi tên tập tin /home/coolcmd/site_maintenance_off để /home/coolcmd/site_maintenance_on.

Đoạn mã cho /.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> 
Các vấn đề liên quan