web-dev-qa-db-fra.com

Comment router vers un dossier statique dans Laravel

J'ai un dossier que j'ai placé dans le dossier/public de mon site Laravel. Le chemin est:

/public/test

le dossier "test" a un fichier appelé index.html qui est juste une ressource statique que je veux charger à partir du dossier public (je ne veux pas créer une vue pour cela dans le cadre - trop à expliquer).

J'ai fait un itinéraire comme celui-ci:

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

Je n'arrive pas à faire fonctionner ça. Je reçois juste une erreur de Chrome disant que cette page a une boucle de redirection.

Je peux y accéder de cette façon:

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

Mais je ne peux utiliser l'extension .html nulle part. Le fichier doit être visible comme:

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

Comment puis-je servir une seule page HTML à partir du dossier public Laravel sans avoir à utiliser l'extension .html?

23
ChiCgi

utilisé pour faire face à ce problème auparavant, comme une sale petite astuce, vous pouvez renommer le dossier de test en quelque chose d'autre, puis mettre à jour

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

la clé n'est pas en conflit entre l'url de votre itinéraire et votre dossier en public

22
terry low

Pour un fichier statique, je pense que vous gaspillez des ressources au service de Laravel.

Il y a eu quelques bugs dans le passé créant des redirections infinies lors de l'accès aux fichiers/dossiers dans public, mais je pense que le dernier .htaccess fourni avec Laravel a résolu ces problèmes ( sur Apache, au moins).

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

Il dit: "Si la demande ne concerne pas un dossier existant, supprimez la barre oblique s'il y en a une. Si la demande ne concerne pas un dossier existant ou un fichier existant, chargez Laravel's index.php '

J'ai ensuite ajouté un fichier .htaccess dans le sous-répertoire pour m'assurer que DirectoryIndex est défini de sorte que index.html sera chargé par défaut sur une demande de répertoire.

4
Dallin

Utilisation:

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

Soit à la fonction de votre fichier de routes, soit à l'intérieur d'un contrôleur.

2
danb4r