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>
3 réponses
Ce que vous pouvez faire est d'utiliser un lien symbolique.
- Placez votre application laravel ailleurs (à l'extérieur du dossier public_html)
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.
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/
Cet exemple devrait fonctionner pour les cas suivants:
- Régulier de domaine: http://example.com
- sous-domaine: http://myapp.example.com
- sous-dossier: http://example.com/myapp
Suivez ces étapes:
- passer le tout à partir de myapp / public dossier myapp/ dossier
- Ouvrir myapp / index.php et mise à jour de bootstrap chemins require _ _ DIR__.'/bootstrap/
- ouvert .env et mettre à jour votre url de base comme: APP_URL=http://example.com/myapp
- 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".