Installer L'application Laravel 5 dans le sous-répertoire avec htaccess

Installation

j'essaie d'installer une application laravel 5 dans ce répertoire sur mon serveur:

public_html/myapp/

Et je veux qu'il soit accessible à cette URL:

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

j'ai créé ce .htaccess règle et placé dans le myapp dossier afin de rediriger les requêtes :

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

Problème:

dans mon navigateur lorsque j'essaie d'accéder à l'application, je reçois des URL redirigées comme:

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

au lieu de jolies URLs comme:

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

Que dois-je changer dans mon .htaccess file pour obtenir des URLs correctes?


mise à jour: l'application laravel peut être déplacée ailleurs si nécessaire, aussi longtemps que la structure D'URL désirée ci-dessus (avec l'application accessible à example.com/myapp/) peut être atteint.

mise à Jour: Lorsque j'essaie d'accéder à example.com/myapp/dashboard je reçois le message d'erreur suivant dans le navigateur: NotFoundHttpException in compiled.php line 7793: avec une trace de pile qui commence par:

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->IlluminateFoundationHttp{closure}(object(Request))

mise à jour: la suivante .fichier htaccess est situé dans le dossier public:

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

    RewriteEngine On

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

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

</IfModule>
12
demandé sur Ben Cole 2015-05-28 08:00:16

3 réponses

Ce que vous pouvez faire est d'utiliser un lien symbolique.

  1. Placez votre application laravel ailleurs (à l'extérieur du dossier public_html)
  2. créer un lien symbolique du dossier public de votre application dans le dossier public_html

    cd /chemin/vers/votre/public_html

    sudo ln -s /chemin/vers/votre/laravel_app/public myapp

vous pouvez en savoir plus sur symlinks ici.

6
répondu atefth 2016-04-21 10:12:32

Vous pouvez facilement réaliser cela en ajoutant .htaccess le fichier myapp dossier (cela redirigera toutes vos requêtes dans myapp dossier vers le public):

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

vous devriez aussi modifier le .htaccess dans votre myapp/public répertoire, comme ceci:

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

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

Le changement ici est que vous réécrire le chemin de la base RewriteBase /myapp/

1
répondu shaddy 2015-05-28 05:23:53

Cet exemple devrait fonctionner pour les cas suivants:

Suivez ces étapes:

  1. passer le tout à partir de myapp / public dossier myapp/ dossier
  2. Ouvrir myapp / index.php et mise à jour de bootstrap chemins require _ _ DIR__.'/bootstrap/
  3. ouvert .env et mettre à jour votre url de base comme: APP_URL=http://example.com/myapp
  4. mettre à jour les chemins dans toutes les vues et layout (également dans le code si vous en avez) pour utiliser l'url de base, comme ceci: src="{{URL:: ('/js/app.js')}}"

il est toujours recommandé de séparer le dossier public du reste de votre application. Vous pouvez ajouter de la protection pour les dossiers Laravel en ajoutant .les fichiers htaccess qui contiennent " Deny from all".

0
répondu gradosevic 2016-12-11 16:24:28