2010-08-04 25 views
5

Tôi đã cài đặt Apache cho Windows. Tôi đã mua CodeIgniter Professional và tải xuống mã nguồn của họ. Nó nói rằng tôi nên đặt .htaccess của nó trong thư mục gốc của trang web vì vậy tôi đã làm. Tôi đặt URL cơ sở là http://127.0.0.1/kids/ nơi trẻ em là thư mục gốc của trang web. Nó cho thấy trang chủ tốt. Khi tôi nhấp vào một liên kết, nó luôn đưa ra lỗi 404. Nó nói, "URL yêu cầu /index.php/welcome/cat/2 không được tìm thấy trên máy chủ này." Tôi đã thử một số possiblities của .htaccess trong thư mục không thành công. Bên trong .htaccess, nó hướng dẫn:Codeigniter không định tuyến ngay

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Giải thích lý do tại sao nó không hoạt động? Tôi cũng đã kiểm tra configs.php và nó có vẻ ok. config ['index_page'] được đặt thành trống. Tôi đã xóa tệp .htaccess và vẫn còn cùng một sự cố ngoại trừ việc nó cho biết "URL yêu cầu/trẻ em/chào mừng/cat/2 không được tìm thấy trên máy chủ này".

Giờ đã bị lãng phí khi cố gắng làm cho nó hoạt động và tôi mất kiên nhẫn.

Dưới đây là hướng dẫn từ CodeIgniter chuyên nghiệp:.

"Để làm cho các thư mục truy cập đến CodeIgniter, bạn cũng sẽ cần phải tạo một tập tin .htaccess nhỏ trong thư mục gốc của trang web của bạn Dưới đây là những gì mà tập tin .htaccess sẽ trông như thế về cơ bản nó chứa các hướng dẫn mà allmvs một số file và thư mục để có thể xem trên trang web:.

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Nếu bạn đã quen thuộc với mod_rewrite trong Apache, bạn sẽ lưu ý rằng quy tắc này bề ngoài là loại bỏ index.php từ URL của bất kỳ đích nào. Dưới đây khi bạn định cấu hình CodeIgniter (và các hạt ularly tập tin config.php), bạn sẽ thấy lý do tại sao đây là một ý tưởng tốt. Nếu bạn không quen thuộc với mod_rewrite trong Apache, đừng quá bị đe dọa bởi tập tin này. Về cơ bản, tệp .htaccess đặt ra một vài quy tắc, một trong số đó loại bỏ index.php khỏi tất cả các URL. Các quy tắc khác trong tệp cho phép sử dụng nhiều thư mục khác mà bạn sẽ cần chuyển tiếp (chẳng hạn như các thư mục chứa CSS, JavaScript, tệp Captcha và hình ảnh). "

Tôi đã làm theo hướng dẫn ... đặt htaccess tập tin trong thư mục gốc và được nêu ra, nó đã cho 404 lỗi.Nếu tôi loại bỏ htaccess tập tin từ thư mục gốc, nó cho thấy trang chủ.Nếu tôi thêm tập tin htaccess, nó cho lỗi 404. Tôi chuyển htaccess và nó đã không làm bất cứ điều gì để lại . -route Rõ ràng, Apache hiểu htaccess nếu không nó sẽ không hiển thị lỗi 404

Trả lời

8

Có thể các tuyến đường của bạn không giải quyết chính xác nhưng tôi không chắc chắn. Tôi muốn giới thiệu các bước sau.

Trước tiên, tôi sẽ chỉ sử dụng PATH_INFO để định tuyến CodeIgniter của bạn vì không cần thiết. Thay đổi tập tin .htaccess của bạn như thế này:

RewriteEngine On 

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^.*$ index.php [L] 

Sau đó, trong cấu hình của bạn, hãy chắc chắn rằng $config['uri_protocol'] được thiết lập để AUTO (mặc định, tôi tin) hoặc REQUEST_URI.

Sau đó, nguyên nhân có khả năng nhất là tuyến đường của bạn mong đợi có dấu gạch chéo ở trên URL.Tôi không biết đủ về CodeIgniter để biết được nơi mà khung cảnh đặc biệt được cấu hình, nhưng bạn có thể gây ra các URL của bạn để có một dấu gạch chéo với các chỉ thị cấu hình sau:

$config['url_suffix'] = "/"; 

Sửa: Hãy chắc chắn rằng mod_rewrite là cũng làm việc. Hãy thử điều này ở phía trên cùng của tập tin .htaccess của bạn, sau khi chỉ thị RewriteEngine:

RewriteRule .* http://stackoverflow.com/ [L,R] 

Nếu bạn được chuyển đến Stack Overflow, ít nhất chúng ta sẽ biết đó là làm việc. Nếu không, bạn không gặp lỗi 500, do đó, vấn đề nằm ở tệp .htaccess và trong trường hợp đó, bạn nên xác nhận rằng mục nhập tương ứng <Directory> trong cấu hình máy chủ của bạn cho vị trí trang web của bạn nằm trên đĩa có AllowOverride All được đặt.

Chỉnh sửa: Tôi phải biết rõ hơn về dấu gạch chéo, xin lỗi về điều đó. Sự cố xảy ra do cách mod_rewrite hoạt động trong ngữ cảnh cho mỗi thư mục (.htaccess) của bạn.

Sau khi URL của bạn được viết lại, nó được kiểm tra để xác định xem mod_rewrite nên làm gì với nó. Khi URL của bạn trỏ đến tài nguyên cục bộ và chứa dấu gạch chéo hàng đầu, mod_rewrite sẽ để nguyên. Khi không, nó sẽ thêm tiền tố cho mỗi thư mục.

Khi nó ở bên trái, chuyển hướng nội bộ sang /index.php, trong trường hợp này, được giả định là URL đủ điều kiện từ máy chủ (máy chủ cục bộ). Vì vậy, tài nguyên được yêu cầu kết thúc là http://localhost/index.php. Khi thêm tiền tố cho mỗi thư mục, một bước sau trong công cụ viết lại sẽ cố gắng xóa DocumentRoot khỏi đường dẫn, nếu có. Điều này để lại cho chúng tôi /kids/index.php, sau đó được chuyển đến chuyển hướng nội bộ và được giải quyết như mong đợi.

+0

không hoạt động Nó cũng gây ra trang chủ để hiển thị lỗi 404. Đã làm những gì bạn hướng dẫn ... vẫn không có gì – netrox

+0

@netrox Hmm..interesting. Xem chỉnh sửa của tôi và hy vọng chúng tôi có thể làm việc từ đó –

+0

Tim, nhờ mẹo gỡ lỗi .. Tôi đã thêm dòng để định tuyến lại để stackoverflow và nó đã chuyển hướng mà không có vấn đề. (tốt gỡ lỗi tip!) Rõ ràng apache hiểu các tập tin htaccess – netrox

0

Hãy thử điều này:.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)$ /index.php/$1 [NC,L] 

Đặt này trong t thư mục con của anh ta nơi index.php là.

+0

cũng không hoạt động. :(Tôi đặt nó trong thư mục gốc và sau khi nhấp vào một liên kết với URL, tôi nhận được lỗi nói, "URL yêu cầu /index.php/welcome/cart/3 không được tìm thấy trên máy chủ này" trên FF. – netrox

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