2016-03-08 13 views
6

Tôi đang tìm một tập lệnh chuyển hướng tất cả các trang của trang web đến một trang tuyên bố rằng toàn bộ trang web đóng cửa vào Chủ Nhật vì lý do tôn giáo.Tôi làm cách nào để "đóng" một trang web vào Chủ Nhật chỉ

Chỉ nên chuyển hướng vào Chủ nhật. Vào tất cả các ngày khác trong tuần, trang web sẽ hoạt động như bình thường.

Tôi muốn làm điều đó ở cấp máy chủ trong tệp .htaccess hoặc bằng tập lệnh PHP.

tôi có thể tưởng tượng một cái gì đó như thế này:

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

Trả lời

1

Bạn có thể nhận được số đại diện của các ngày trong tuần với date() và để chuyển hướng:

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

Đó là khá tốt để làm điều đó thông qua PHP bằng cách đặt mã này lên đầu của tiêu đề của bạn.

1

Tôi sẽ không làm điều này với header từ người dùng, tùy thuộc vào cài đặt trình duyệt của họ, có thể tải bản sao trang được lưu trong bộ nhớ cache vào những ngày khác với Thứ Hai.

Bạn có thể sử dụng include để thực thi tập lệnh từ một tệp khác. Ở phía trên cùng của mỗi trang thêm những điều sau đây:

include 'path/to/closedonsunday.php'; 

Và sau đó closedonsunday.php sẽ có một kiểm tra rất đơn giản như:

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

Các exit là phần quan trọng ở đây là vì nó sẽ ngăn chặn PHP chết.

Bạn cũng nên cẩn thận với múi giờ. Đảm bảo rằng đồng hồ máy chủ của bạn được đặt chính xác và tập lệnh của bạn biết múi giờ nào cần sử dụng!

+0

Xin chào, Cảm ơn một nhóm, đặc biệt là trên bản sao được lưu trong bộ nhớ cache và cài đặt đồng hồ máy chủ. Tôi đoán việc đưa phần bao gồm lên đầu mỗi trang là một điều khá thú vị đối với một webshop với hơn 1.000 trang. Có một giải pháp trang nào cho đến khi bạn quan tâm không? – Anthony

+2

Nó phụ thuộc vào thiết kế ứng dụng của bạn. Tôi có xu hướng luôn có một câu lệnh 'include' trên mỗi trang để những thứ như xác thực và kết nối cơ sở dữ liệu chỉ có thể được xử lý ở một nơi (đây sẽ là 'giải pháp trang đơn'). Nếu bạn có> 1.000 trang hiện không 'bao gồm' bất cứ điều gì thì có rất nhiều công việc để sửa đổi tất cả. Trong trường hợp đó, phương pháp '.htaccess' trong câu trả lời khác ở đây sẽ ít hoạt động hơn. – timclutton

1

Theo ý kiến ​​của tôi, bạn nên sử dụng .htaccess tệp. Ngày và thời gian giá trị trong .htaccess đến dưới hình thức

% {} TIME_XXXX

nơi XXXX là loại ngày hoặc thời gian bạn muốn.

Trong trường hợp nếu bạn muốn chuyển hướng một url tổng quát để một trong đó có ngày hôm nay, bạn có thể sử dụng:

RewriteRule^bài viết/ngày nay $/posts /% {TIME_YEAR} -% {TIME_MON} - % {} TIME_DAY

điều đó sẽ dẫn đến/bài viết/ngày nay được chuyển hướng đến một cái gì đó giống như/bài viết/2015-08-27

Nếu bạn muốn chuyển hướng một trang sau một ngày (và thời gian) là mật khẩu bạn có thể sử dụng một cái gì đó như sau, nơi nếu ngày được thông qua 9 vào ngày 27 tháng 8 năm 2015, chuyển hướng sẽ diễn ra. Chúng tôi sử dụng so sánh số đơn giản để biến ngày thành số nguyên và sau đó so sánh nó.

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

Trong trường hợp của bạn

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

Đối với hướng dẫn hơn, bạn có thể sử dụng liên kết Tutoriallink 2

Nếu bạn muốn sử dụng PHP cách sau đó sử dụng công tắc. Nếu sau này bạn muốn chuyển hướng vào bất kỳ ngày nào khác thì bạn có thể quản lý điều đó tại đây.

$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

Cảm ơn bạn đã hướng dẫn htaccess. Tôi có phải không mà chuyển hướng các trang web mỗi chủ nhật nó đến này: RewriteCond% {TIME_DAY} = 0 RewriteRule^$ /destination/url.html [R = 301, L] – Anthony

+1

Không TIME_DAY đại diện cho ngày hiện tại. bạn nên TIME_WDAY ngày trong tuần hiện tại (0-6). – Deep

+0

bạn cũng có thể sử dụng trường hợp chuyển đổi. Chuyển đổi luôn tốt hơn các điều kiện khác. – Deep

6

Bạn có thể sử dụng các nguyên tắc sau trong .htaccess:

RewriteEngine on 

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

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

Biến %{TIME_WDAY} đại diện cho ngày trong tuần (0-6).

Mã ở trên sẽ chuyển hướng tất cả các yêu cầu đến /closedonsunday.html nếu điều kiện được đáp ứng.

+0

Nó hoạt động! Tuy nhiên, chỉ dành cho trang chủ không cho tất cả các trang trong một trang. Tôi có thể hỏi hướng dẫn của bạn ở đây không? – Anthony

+1

@Anthony tinh chỉnh regex đối sánh trong rewriteRule sao cho phù hợp với nhu cầu của bạn. Đọc trên cú pháp trong [tài liệu] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule) (nhưng về cơ bản chỉ là pcre) –

+0

@ SáT Vì vậy, tôi đã thực hiện vài giờ . Kết quả 'tốt nhất' là nhận được 500 lỗi máy chủ nội bộ như ERR_TOO_MANY_REDIRECTS Ngoài ra mã như Tùy chọn + FollowSymlinks RewriteEngine on RewriteCond% {REQUEST_URI}!/Closedonsunday $ RewriteRule $ /closedonsunday.html [R = 302, L] dường như không hoạt động trong tình huống của tôi. – Anthony

Các vấn đề liên quan