2011-09-23 25 views
7

Nếu tôi muốn xem từng URL không tồn tại đã được chuyển đến ứng dụng web của tôi và cung cấp chế độ xem mà không phục vụ 404, tôi sẽ làm như thế nào?Bộ điều khiển Catch-all/Route

Về cơ bản, tôi cần phải ghi lại số liệu thống kê dựa trên những lần truy cập này, nhưng tôi cần thực hiện điều đó bằng cách phân phối nội dung chứ không phải lỗi 404.

Theo như tôi có thể nói từ application/config/routes.php, tôi có thể sử dụng

$route['default_controller'] = 'catchall'; 

nhưng tôi cần điều đó cho các ứng dụng web thực sự của tôi.

tôi cũng có thể sử dụng

$route['404_override'] = 'catchall'; 

nhưng tôi không muốn ném 404s.

tôi đã cố gắng sử dụng

$route['(:any)'] = '$1'; 

nhưng tôi cần phải ghi lại toàn bộ URL (ví dụ bất kỳ khoảng thời đoạn), không chỉ là phân đoạn đầu tiên.

Trả lời

6

Sử dụng $route['(:any)'] = 'catchall_controller'. Sau đó, trong bộ điều khiển, bạn có thể truy cập các phân đoạn URI bằng cách sử dụng $this->uri->segment(n).

+3

Tôi tự hỏi tại sao đây là câu trả lời được chọn, điều này định tuyến tất cả các url hợp lệ cũng đến bộ điều khiển catchall .. !! –

+0

@ClainDsilva không nếu tuyến đường này được đặt cuối cùng. Nó vẫn là một cái gì đó mà sẽ cần một bình luận trong trường hợp ai đó đã cố gắng tổ chức lại các tập tin tuyến đường. – Goose

0

Tôi không biết sự khác biệt giữa codeigniter và PHP bình thường, nhưng, trong php bình thường, bạn có thể chỉnh sửa htaccess hoặc bất cứ điều gì để xác định một trang 404 tùy chỉnh.

Trong trang 404 tùy chỉnh, hãy làm điều tương tự như sau: $ được yêu cầu = $ _ SERVER ['REQUEST_URI'];

để có được URL được yêu cầu .... làm xử lý của bạn ... và làm điều này để xóa 404:

header ("HTTP/1.1 200 OK"); tiêu đề ("Trạng thái: 200 OK");

Sau đó, bao gồm html của bạn hoặc bất kỳ thứ gì bạn muốn phân phối.

+0

Hy vọng bạn hiểu Codeigniter ngay bây giờ. –

1

Bạn đã thử thêm nhiều lần bắt tất cả tuyến đường cho số lượng phân khúc khác nhau chưa?

$route['(:any)'] = '$1'; 
$route['(:any)/(:any)'] = '$1/$2'; 
$route['(:any)/(:any)/(:any)'] = '$1/$2/$3'; 

Tôi đoán điều đó sẽ hiệu quả, nhưng có thể có cách thanh lịch hơn để thực hiện điều đó.

+0

Điều gì về '(. +)'? –

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