2012-03-09 12 views
5

Tôi có một trang cá nhân cho 404 với htaccessTuỳ chỉnh trang báo lỗi 404 - cho các trang PHP chỉ

ErrorDocument 404 /404.php 

Nó hoạt động tốt, nhưng phải mất tất cả mọi thứ .jpg, .js, .css vv ...
Tôi muốn nó chỉ lấy .php và thực hiện lỗi 404 bình thường cho tất cả những người khác.

Tôi không tìm thấy tùy chọn đó ở bất kỳ đâu.

Cảm ơn bạn rất nhiều.

+0

ý của bạn là gì "có mọi thứ"? 404 là mã phản hồi cho bất kỳ yêu cầu HTTP nào không tìm thấy, bất kể đó là yêu cầu php hoặc hình ảnh. –

+0

ý tôi là nếu tôi làm www.example.com/img/errorimg.jpg anh ấy sẽ dẫn tôi đến www.example.com/404.php và tôi không muốn ... – user1040899

+0

Bạn có thể thử thực hiện điều này với URL Rewriting (mod_rewrite) - yêu cầu chuyển hướng đến bất kỳ tệp .php không tồn tại nào cho 404.php tùy chỉnh của bạn - có thể (chỉ 3 hoặc 4 dòng) – LazyOne

Trả lời

5

Không chắc nhưng cung cấp cho một thử này:

<Files ~ "\.php$"> 
    ErrorDocument 404 /404.php 
</Files> 

Trích từ Files Directive tài liệu:

Các < tập tin > chỉ giới hạn phạm vi của kèm chỉ thị của tên tập tin.

+0

+1 Nó hoạt động hoàn hảo, và nó chỉ là những gì OP yêu cầu cho – ShadowScripter

+0

Hoạt động tốt! Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn :-) – user1040899

2

Có một vài phương pháp có thể để điều này, nhưng tôi sẽ làm một trong các cách sau:

Bạn có thể sử dụng mod_rewrite, theo đề nghị của @LazyOne, để chuyển hướng chỉ tập tin có phần mở rộng .php vào tài liệu tùy chỉnh của bạn:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f # Only redirect to error for files that don't exist 
RewriteRule ^(.*)\.php$ /404.php [L] 

hoặc bạn có thể hướng tất cả mọi thứ thông qua việc xử lý lỗi PHP như bạn đã làm, và sử dụng PHP để xác định xem các tài nguyên được yêu cầu là một kịch bản PHP hay không:

<?php 

    if (strtolower(substr($_SERVER['SCRIPT_URL'], -4)) != '.php') { 
    // If the requested resource does not have a .php extension, include the standard error doc and exit 
    include '404.html'; 
    exit; 
    } 

    // Handle .php 404s here 

Điểm bất lợi của phương pháp thứ hai này là bạn có thể cần phải viết lại tài liệu lỗi chuẩn để nó sử dụng PHP để nhận thông tin động để hiển thị cho người dùng, và đường dẫn tài nguyên được yêu cầu.

1

Bằng cách sử dụng $_SERVER['REQUEST_URI'], bạn có thể dễ dàng kiểm tra kết thúc của tập tin đó dẫn đến một lỗi và sau đó ném một tiêu đề để một bình thường 404 nếu nó không thỏa mãn yêu cầu của bạn hay chỉ làm một khác nhau 404

Đặt mã này vào tệp 404.php của bạn

$bad_url = $_SERVER['REQUEST_URI']; 
$bad_extension = substr(strrchr($bad_url,'.'),1); 

if($bad_extension != "php"){ 
    //Not PHP 
}else{ 
    //PHP 
} 
+0

gửi 301 thay vì 404 có vẻ khá lạ –

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