2015-03-23 25 views
10

Ho una cartella che ho inserito nella cartella/public nel mio sito Laravel. Il percorso è:Come indirizzare a una cartella statica in Laravel

/public/test 

la cartella "test" ha un file chiamato index.html che è solo una risorsa statica voglio caricare dalla cartella pubblica (io non voglio creare una vista per questo all'interno il quadro: troppo da spiegare).

Ho fatto un percorso simile a questo:

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

io non sono in grado di farlo funzionare. Ho appena ricevuto un errore da Chrome che diceva che questa pagina ha un ciclo di reindirizzamento.

io possa accedere in questo modo:

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

Ma non posso usare l'estensione .html ovunque. Il file deve essere visibile come:

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

Come posso servire una singola pagina HTML dalla cartella pubblica laravel senza dover utilizzare l'estensione .html?

risposta

8

utilizzato per affrontare questo problema prima, come un po 'sporco trucco, è possibile rinominare la cartella di prova a qualcos'altro quindi aggiornare

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

la chiave è alcun conflitto tra il percorso URL con la cartella in pubblico

+0

Questo ha funzionato. Come hai detto, la chiave è assicurarsi che il percorso del percorso e il percorso (cartella) nella directory pubblica abbiano nomi diversi. Grazie per l'aiuto! – ChiCgi

2

Usa:

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

Sia in funzione al vostro file di percorsi o all'interno di un controllore.

+1

Questo non ha funzionato. Ricevo ancora l'errore del loop di reindirizzamento. – ChiCgi

2

Per un file statico, penso che stai sprecando risorse che lo servono attraverso Laravel.

Ci sono stati alcuni bug in passato che creavano reindirizzamenti infiniti durante il tentativo di accedere a file/cartelle entro public, ma penso che l'ultimo .htaccess fornito con Laravel abbia risolto questi problemi (su Apache, almeno). Sembra che questo

<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> 

Si dice 'Se la richiesta non è per una cartella esistente, striscia la slash se ce n'è uno. Se la richiesta non è per una cartella esistente o per un file esistente, caricare Laravel's index.php '

Ho quindi aggiunto un file .htaccess all'interno della sottodirectory per garantire che DirectoryIndex sia impostato in modo che index.html sia caricato per impostazione predefinita su una richiesta per una directory.

Problemi correlati