2015-05-28 19 views
9

Setup

Tôi cố gắng để cài đặt một ứng dụng laravel 5 trong thư mục này trên máy chủ của tôi:Install Laravel 5 ứng dụng trong thư mục con với htaccess

public_html/myapp/

Và tôi muốn nó được truy cập tại URL này:

http://www.example.com/myapp/

tôi đã tạo ra quy tắc .htaccess này và đặt nó trong myapp thư mục để chuyển các yêu cầu:

RewriteEngine on 
RewriteRule ^(.*)$ public/$1 [L] 

Vấn đề:

Trong trình duyệt của tôi khi tôi cố gắng truy cập vào các ứng dụng tôi bị chuyển hướng các URL như:

  • http://www.example.com/myapp/public/index.php
  • http://www.example.com/myapp/public/index.php/dashboard

thay vì đẹp U đẹp RLS như:

  • http://www.example.com/myapp/
  • http://www.example.com/myapp/dashboard

gì tôi cần phải thay đổi trong tập tin .htaccess của tôi để có được URL thích hợp làm việc?


Cập nhật: Ứng dụng Laravel có thể được chuyển đến nơi khác nếu cần, miễn là có thể đạt được cấu trúc URL mong muốn ở trên (với ứng dụng có thể truy cập tại example.com/myapp/).

Cập nhật: Khi tôi cố gắng truy cập vào example.com/myapp/dashboard Tôi nhận được thông báo lỗi sau đây trong trình duyệt: NotFoundHttpException in compiled.php line 7793: với một vết đống mà bắt đầu với:

in compiled.php line 7793 
at RouteCollection->match(object(Request)) in compiled.php line 7066 
at Router->findRoute(object(Request)) in compiled.php line 7038 
at Router->dispatchToRoute(object(Request)) in compiled.php line 7030 
at Router->dispatch(object(Request)) in compiled.php line 1989 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 

Cập nhật: Các tập tin .htaccess sau nằm ở nơi công cộng thư mục:

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

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

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

</IfModule> 
+0

Bạn có tệp htaccess trong thư mục công cộng không? –

+0

Không cài đặt ứng dụng trong public_html làm cho tất cả các tệp Laravel của bạn có thể truy cập được với mọi người không? – Mahozi

+0

Hmm, có thể. Nếu tôi cài đặt bên ngoài public_html, làm thế nào tôi sẽ trỏ đến nó bằng .htaccess? (Sẽ chấp nhận rằng như là một câu trả lời hợp lệ quá miễn là nó đạt được cấu trúc URL tôi hy vọng cho) –

Trả lời

1

bạn có thể dễ dàng đạt được điều này bằng cách thêm thêm .htaccess tập tin trong thư mục myapp (điều này sẽ chuyển hướng tất cả các yêu cầu của bạn trong myapp thư mục vào public như mong muốn):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ public/$1 [L] 
</IfModule> 

Bạn cũng nên sửa đổi .htaccess trong thư mục myapp/public của bạn, như thế này:

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On  
    RewriteBase /myapp/ 

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

Sự thay đổi ở đây là bạn viết lại đường cơ sở RewriteBase /myapp/

+0

Tôi vẫn dường như có cùng một vấn đề. Viết lại làm việc cho các tập tin văn bản đơn giản, tuy nhiên khi tôi cố gắng truy cập index.php tôi được chuyển hướng như mô tả ban đầu. Tôi sẽ cập nhật các câu hỏi ban đầu với một thông báo lỗi hơn tôi nhận thấy trong trường hợp đó giúp tìm ra những gì đang xảy ra. –

+0

Vui lòng xóa '.htaccess' khỏi thư mục công khai và đặt tên tôi mà tôi đã đề xuất cho bạn. – shaddy

+0

Tôi đã thay thế tệp 'myapp/public/.htaccess' bằng tệp được cung cấp và tôi cũng đã thay thế" myapp "bằng tên của thư mục ứng dụng. Cũng xóa bộ nhớ cache của trình duyệt chỉ để chắc chắn. Cùng một vấn đề chuyển hướng. Các quy tắc viết lại bạn cung cấp có vẻ tốt với tôi, vì vậy có thể có cái gì đó khác đang xảy ra với các tuyến đường trong ứng dụng?Tôi không chắc lắm. –

4

Việc bạn có thể làm là sử dụng liên kết tượng trưng .

  1. Nơi ứng dụng laravel của bạn ở một nơi khác (ngoài thư mục public_html)
  2. Tạo một liên kết tượng trưng của thư mục công cộng của ứng dụng của bạn bên trong thư mục public_html

    cd/path/to/your/public_html

    sudo ln -s/path/to/your/laravel_app/myapp công

Bạn có thể đọc thêm về các liên kết tượng trưng here.

+1

Ý tưởng và giải pháp tuyệt vời. Kuddos !!!! – zmonteca

+0

@ ben-cole bạn có thể vui lòng chấp nhận câu trả lời của tôi nếu nó làm việc cho bạn? – atefth

0

Ví dụ này nên làm việc đối với trường hợp sau đây:

Thực hiện theo các bước sau:

  1. Move tất cả mọi thứ từ myapp/công thư mục để myapp/ thư mục
  2. mở myapp/index.php và cập nhật đường dẫn bootstrap để đòi hỏi __DIR __. '/ Bootstrap/
  3. mở .env và cập nhật địa chỉ cơ sở của bạn như: APP_URL = http://example.com/myapp
  4. cập nhật đường dẫn trong tất cả các quan điểm và cách bố trí (cũng trong mã nếu bạn có bất kỳ) để sử dụng địa chỉ cơ sở, như thế này: src = "{{URL :: tới ('/ js/app.js')}}"

Bạn luôn nên tách thư mục công khai khỏi phần còn lại của ứng dụng. Bạn có thể thêm một số bảo vệ cho các thư mục Laravel bằng cách thêm các tệp .htaccess bên trong chúng sẽ chứa "Từ chối từ tất cả".

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