2016-06-26 10 views
9

Mam klasyczną strukturę projektu Larevel 5 i muszę przekierować wszystkie żądania do public/.W jaki sposób przekierowujesz wszystkie żądania do publicznych/folderów w laravel 5

Jestem na klasycznym środowisku hostingowym, więc public/ to podfolder mojego katalogu głównego.

Wyobrażam sobie, że można to zrobić poprzez .htaccess, ale nadal muszę dowiedzieć się, jak to zrobić. Ktoś może pomóc?

Dzięki

+0

Wyszukiwanie [tag: .htaccess], [tag: laravel] i public: http://stackoverflow.com/search?q=%5B.htaccess%5D+%5Blaravel%5D+public –

+0

Uzyskaj lepszy hosting. Udostępnienie niepublicznych plików jest potencjalną luką w zabezpieczeniach. – ceejayoz

Odpowiedz

12

Istnieją dwa rozwiązania:

1. Korzystanie z .htaccess mod_rewrite

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^public 
RewriteRule ^(.*)$ public/$1 [L] 

2. Można dodać plik index.php zawierający następujący kod i umieść go w folderze głównym Laravel (folder public_html).

<?php 
header('Location: public/'); 
1

Jest to wyciąg z another answer które również mogą pomóc.

-

  • zmodyfikować public_html/.htaccess przekierować wszystkie żądania do public podkatalogu.

    # public_html/.htaccess 
    
    <IfModule mod_rewrite.c> 
        <IfModule mod_negotiation.c> 
         Options -MultiViews 
        </IfModule> 
    
        RewriteEngine On 
    
        # Redirect All Requests To The Subfolder 
        RewriteRule^/public 
    
    </IfModule> 
    
  • Sprawdź, czy masz odpowiednią public_html/public/.htaccess (GitHub).

    # public_html/public/.htaccess 
    
    <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] 
    
        # Handle Authorization Header 
        RewriteCond %{HTTP:Authorization} 
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
    </IfModule> 
    
0

Idealnym scenariuszem jest posiadanie /home/user/public jako dowiązania symbolicznego z /home/user/laravel/public.