2011-12-12 31 views
5

Tôi đang sử dụng .htaccess để hiển thị trang HTML tùy chỉnh cho các lỗi (401, 404, 500 .. v.v.). Tôi muốn hạn chế quyền truy cập trực tiếp vào thư mục lỗi chứa các trang html. Bên trong của tập tin .htaccess của thư mục lỗi, tôi có như sau:Hạn chế quyền truy cập trực tiếp vào các trang lỗi

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain\.com 
RewriteRule \.(html|htm)$ - [F] 

này không thực sự có vẻ làm việc và tôi nhận được:

a 500 Internal Server Error error was encountered while trying to use an 
ErrorDocument to handle the request. 

gì thay đổi làm tôi phải thực hiện với .htaccess để làm việc này. Tôi cũng tự hỏi nếu nó sẽ làm việc nếu tôi dính vào thư mục lỗi bên ngoài thư mục public_html?

+0

tôi không nhận được lỗi 500 –

Trả lời

0

Trong file .htaccess của bạn, chuyển hướng tất cả các lỗi vào một tập tin php

ErrorDocument 403 /errors.php 
ErrorDocument 404 /errors.php 
ErrorDocument 500 /errors.php 

khi sử dụng errors.php $ _SERVER ['REDIRECT_STATUS'] với câu lệnh if else để phát hiện lỗi và hiển thị thông báo tùy chỉnh

if($_SERVER['REDIRECT_STATUS'] == 403) 
{ 
    die("Forbidden"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 404) 
{ 
    die("NOT FOUND"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 500) 
{ 
    die("Server Error"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 200) 
{ 
// user is trying to directly access the errors page, redirect to index.php 
header("Location: index.php"); 
} 
else 
{ 
    // all other error codes 
} 

Đây là List of HTTP status codes. Viết câu lệnh if else cho mỗi lỗi bạn muốn phát hiện. Lỗi không bị phát hiện sẽ rơi vào khối khác

+2

Nếu trang lỗi đã được truy cập trực tiếp thì '$ _SERVER ['REDIRECT_STATUS']' có thể không được đặt ở tất cả - nó dường như phụ thuộc vào máy chủ. (Trong trường hợp đó khối 'else' của bạn sẽ không chỉ bắt được" tất cả các mã lỗi khác ", mà còn truy cập trực tiếp.) – MrWhite

5

Đây là những gì bạn nên đặt trong .htaccess của bạn (trong public_html của bạn)

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^(www\.)?mydomain\.com 
RewriteRule \.(html|htm)$ - [F] 

Hãy cho tôi biết nếu nó hoạt động

+0

Nó không thực sự làm thay đổi –

+0

bạn có các quy tắc khác trong .htaccess? –

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