2015-03-23 14 views
10

Tôi có một thư mục mà tôi đã đặt trong thư mục/public trong trang Laravel của mình. Đường dẫn là:Cách định tuyến tới một thư mục tĩnh trong Laravel

/public/test 

thư mục "test" có tệp gọi là index.html mà chỉ là tài nguyên tĩnh tôi muốn tải từ thư mục công cộng (Tôi không muốn tạo chế độ xem cho nội dung này trong khuôn khổ - quá nhiều để giải thích).

Tôi đã thực hiện một lộ trình như thế này:

Route::get('/test', function() { 
    return File::get(public_path() . '/test/index.html'); 
}); 

Tôi không thể có được điều này để làm việc. Tôi vừa gặp lỗi từ Chrome nói rằng trang này có vòng lặp chuyển hướng.

tôi có thể truy cập vào nó theo cách này:

http://www.example.com/test/index.html 

Nhưng tôi không thể sử dụng phần mở rộng .html bất cứ nơi nào. Tệp phải được hiển thị dưới dạng:

http://www.example.com/test/ 

Làm cách nào để phân phối một trang HTML từ thư mục công cộng Laravel mà không phải sử dụng phần mở rộng .html?

Trả lời

8

sử dụng để đối mặt với vấn đề này trước đây, như một mẹo nhỏ bẩn, bạn có thể đổi tên thư mục thử nghiệm để cái gì khác sau đó cập nhật

return File::get(public_path() . '/to new folder name/index.html'); 

phím không có xung đột giữa url tuyến đường của bạn với thư mục của bạn ở nơi công cộng

+0

Điều này đã hiệu quả. Như bạn đã nói, điều quan trọng là đảm bảo đường dẫn tuyến đường của bạn và đường dẫn (thư mục) trong thư mục công cộng đều có tên khác nhau. Cảm ơn đã giúp đỡ! – ChiCgi

2

Sử dụng:

return Redirect::to('/test/index'); 

Hoặc tại chức năng tại tập tin tuyến đường của bạn hoặc bên trong một bộ điều khiển.

+1

Điều đó không hiệu quả. Tôi vẫn nhận được lỗi vòng lặp chuyển hướng. – ChiCgi

2

Đối với một tệp tĩnh, tôi nghĩ bạn đang lãng phí tài nguyên phân phối nó thông qua Laravel.

Đã có một số lỗi trong quá khứ tạo chuyển hướng vô hạn khi cố gắng truy cập vào các tập tin/thư mục trong public, nhưng tôi nghĩ rằng .htaccess mới nhất mà đi kèm với Laravel đã giải quyết những (trên Apache, ít nhất). Có vẻ như đây là

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

Nó nói 'Nếu yêu cầu không dành cho thư mục hiện có, hãy bỏ dấu gạch chéo nếu có. Nếu yêu cầu không dành cho thư mục hiện có hoặc cho một tệp hiện có, hãy tải index.php '

I của Laravel sau đó tôi đã thêm tệp .htaccess trong thư mục con để đảm bảo rằng DirectoryIndex được đặt để index.html sẽ được tải theo mặc định trên một yêu cầu cho một thư mục.

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