web-dev-qa-db-fra.com

Laravel 4 suppression du public de l'URL

Donc, j'exécute xampp sur Windows. J'essaie actuellement de me familiariser avec le framework Laravel. Maintenant, quand c'est indiqué. Comment puis-je accéder à mon application/site Web Laravel directement dans la racine?

Exemple,

  • Ce que je fais maintenant est: localhost/laravel/public/about (voir la page About) 
  • Ce que je veux faire est: localhost/laravel/about

Des bonnes solutions pour cela? Dois-je ajouter un fichier .htacess sur le dossier racine de laravel? (pas le public).

Aucune suggestion?

16
Kevin Jolan

Le moyen le plus simple est de créer un fichier .htaccess à la racine Laravel avec le contenu suivant:

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

Il devrait être redirigé facilement. 

Référence:https://coderwall.com/p/erbaig/laravel-s-htaccess-to-remove-public-from-url

12
Nirmal Garia

Voici comment je l'ai fait.

  1. Editez votre fichier hôte Windows - C:\Windows\System32\drivers\etc\hosts
  2. Editez le fichier Apache vhosts - Drive-Letter:\xampp\Apache\conf\extra\httpd-vhosts.conf
  3. Ajouter un fichier htaccess au dossier laravel/public (s'il n'y est pas déjà)
  4. Redémarrez le serveur Xampp Apache

Windows peut être un véritable PITA lorsque vous essayez de modifier le fichier Hosts à cause du contrôle de compte d'utilisateur. Puisque je travaille sur toutes sortes de petits projets de loisir, je dois éditer ce fichier tout le temps, alors c’est ce que je fais.

  • Installez PSPad. Il se charge très rapidement et vous pouvez marquer des fichiers pour faciliter le chargement/la modification. Sublime Text fonctionne également bien si vous chargez les deux fichiers que j'ai mentionnés ci-dessus et enregistrez l'espace de travail en tant que nouveau projet.
  • Cliquez avec le bouton droit sur le raccourci du programme PSPad (ou un autre éditeur) et choisissez "Exécuter en tant qu'administrateur". Vous ne pouvez pas enregistrer les modifications dans le fichier Hosts sauf si vous procédez ainsi.
  • Ouvrez le fichier Windows Host dans l'éditeur. Ce fichier n'a pas d'extension, vous devez donc choisir "Tous les fichiers" dans la boîte de dialogue Ouvrir fichier pour voir le fichier.
  • Au bas du fichier, ajoutez ceci:

    127.0.0.1  laravel.dev
    

    Cela indique à Windows de pointer le navigateur Web sur localhost chaque fois que vous entrez laravel.dev dans la barre d'adresse du navigateur.

  • Enregistrez le fichier.
  • Ouvrez le fichier xampp Apache httpd-vhosts.conf.
  • Au bas du fichier, ajoutez ceci: (Je suppose que xampp est installé à la racine du lecteur D:)

    <VirtualHost *:80>
      ServerName laravel.dev
      DocumentRoot "D:/xampp/htdocs/laravel/public"
      <Directory "D:/xampp/htdocs/laravel/public">
      </Directory>
    </VirtualHost>
    
  • Ajoutez un fichier htaccess à votre dossier laravel/public (si ce n’est pas déjà fait). Je pense que le fichier htaccess par défaut fourni avec L4 ressemble à ceci:

    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
  • Redémarrez votre serveur Apache xampp.
  • Ouvrez un navigateur Web et tapez dans la barre d'adresse - http://laravel.dev
  • Cela vous mènera au fichier index.php dans le dossier "public".
  • Pour accéder à la page À propos de, je pense que l'adresse serait http://laravel.dev/about
11
HomeSlice

BEST Approch : Je ne recommanderai pas de supprimer public, mais sur un ordinateur local, créez un point d’hôte virtuel sur un répertoire public et sur un hébergement distant, passez public à public_html et dirigez votre domaine vers ce répertoire. Reason, tout votre code laravel sera sécurisé parce que son niveau descend dans votre répertoire public :)

METHODE 1: Je viens de renommer server.php en index.php et cela fonctionne

METHODE 2:

Voici ma structure de répertoire,

/laravel/
... app
... bootstrap
... public
... etc

Suivez ces étapes faciles

  1. déplace tous les fichiers du répertoire public vers la racine/laravel/
  2. maintenant, pas besoin de répertoire public, donc vous pouvez éventuellement le supprimer maintenant
  3. maintenant ouvrir index.php et faire les remplacements suivants 

requireDIR. '/ ../bootstrap/autoload.php'; 

à 

requireDIR. '/ bootstrap/autoload.php'; 

et

$ app = require_onceDIR. '/ ../bootstrap/start.php'; 

à

$ app = require_onceDIR. '/ bootstrap/start.php';

  1. ouvrez maintenant bootstrap/paths.php et modifiez le chemin du répertoire public:

'public' =>DIR. '/ ../public',

à

'public' =>DIR. '/ ..',

et voilà, maintenant essayez http: // localhost/laravel /

10
Wasim A.

Déplacez le contenu du dossier/public vers le bas.

Vous devrez mettre à jour les lignes d'inclusion dans index.php pour pointer vers l'emplacement correct. (si c'est un niveau, supprimez le '../').

10
gan

Définissez votre racine de document pour Apache dans le dossier public et non dans le dossier laravel. C'est la technique la plus simple et recommandée pour les environnements de production.

9
Gaurav Gupta

J'utilise L5, cela fonctionne très bien pour moi:

  1. Renommez le fichier server.php de votre dossier racine Laravel en index.php.
  2. copiez le fichier .htaccess du répertoire/public dans votre dossier racine Laravel.

- C'est ça !!!

4
X-Coder

Ajoutez le code suivant au fichier htaccess. Cela peut vous aider.

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
3
Mahendra Jella

J'ai également eu du mal à résoudre ce problème, mais j'ai trouvé une solution simple qui ne nécessite que la création d'un autre .htaccess à la racine de votre application.

Le .htaccess lui-même devrait contenir ceci:

RewriteEngine On

RewriteCond %{HTTP_Host} ^{yoursite}.{extension} [NC]
RewriteRule (.*) http://www.{yoursite}.{extension}/$1 [R=301,L]

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

Le système complet continue à fonctionner mais il redirige vers le dossier/public.

C'est comment j'ai résolu le problème pour moi-même.

J'espère que ça aide!

À votre santé.

3
Marnix

Ajoutez le code suivant dans votre .htaccess (s'il n'existe pas, créez un .htaccess sur le répertoire racine de laravel)

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

Source: http://tutsnare.com/remove-public-from-url-laravel/

à la source, vous avez également recours à une autre méthode.

Mise à jour: le moyen préféré de le faire est de modifier la structure de répertoires, ce qui explique l’URL source. 

3
Vishal Tarkar

juste en une étape simple, je l'ai fait dans laravel 5

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

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

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

puis renommez votre server.php en index.php

que ça va marcher

ou si vous faites juste du développement local

lancer ce php artisan serve comman 

il démarrera le serveur local à localhost:8000 (le port peut varier)

3
ddw147

Si vous ne souhaitez pas passer par le stress de la configuration du fichier .htaccess, vous pouvez utiliser le serveur intégré PHP de la manière suivante:

  1. Depuis votre utilitaire de commande, cd dans laravel\public
  2. La course: php -S localhost:8000

Une fois que vous pourrez accéder à votre site Web, allez à:

http:://localhost:8000

fonctionne sans ajouter public

Voir le manuel officiel pour en savoir plus: http://php.net/manual/en/features.commandline.webserver.php

2
Digitlimit

J'ai trouvé que Geart Flow fonctionne avec laravel localy.

Ce que vous pouvez faire, c'est configurer xampp un peu. Dans le fichier httpd.conf de votre xamp, vous devez trouver le document DocumentRoot et <Directory>. Changez le répertoire racine dans votre dossier public laravel et redémarrez Apache. Depuis quand vous pouvez accéder à votre projet simplement en tapant localhost. Maintenant, si vous le souhaitez, vous pouvez modifier votre fichier hôte et réécrire le DNS local, par exemple: 127.0.0.1 example.laravel.com et vous pouvez désormais accéder à votre projet avec une URL réelle. Cela peut sembler un peu compliqué, mais ce n'est pas.

Une alternative à cela serait php artisan serve. Vous pouvez démarrer le serveur sur différents ports et lors de la réécriture du fichier hosts.

Vous pouvez ajouter des fonctionnalités pour améliorer encore plus votre flux de travail, par exemple vagrant ou ngrok. Vous pouvez partager votre projet pour une présentation en direct (la vitesse peut être indiquée ici).

2
Evaldas Butkus

Allez dans le dossier du projet en utilisant cmd et tapez "php artisan serve" . Maintenant, allez à: localhost: 8000

2
user3617691

Vous pouvez utiliser des liens symboliques ou éditer le fichier httpd.conf.

Vérifiez ma réponse à une autre question similaire. J'espère que ça aide.

2
tolgamorf

Vous devez faire les choses suivantes:

  1. commencez par copier tout le contenu du répertoire public de votre répertoire racine, c’est-à-dire apportez le contenu du dossier public 1 étape supérieure. 

  2. modifier le contenu de index.php

De =>

require __DIR__ . "/../bootstrap/autoload";
$app = require_once __DIR__ . "/../boostrap/start.php"

To => 

 "require __DIR__.'/bootstrap/autoload.php';"
"$app = require_once __DIR__.'/bootstrap/start.php';

ainsi que le contenu de bootstrap/paths.php

De => 'public' => __DIR__.'/../../',

To => 'public' => __DIR__.'/..',

3.Alors, créez le fichier .htaccess dans votre répertoire racine et écrivez-le.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
1
Prabal Pradhan

renommez le server.php en index.php et copiez le .htaccess à partir du /public… .. Si vous envoyez votre application en ligne, il suffit de changer DocumentRoot en chemin public.

1
ZhiJia Tang

Besoin de supprimer le segment public dans l'application larvel4

Laravel 4 vous oblige à placer le code de votre application d’un niveau supérieur à celui de la racine Web, ce qui pose des problèmes à certains développeurs qui sont bloqués sur un hébergement partagé et qui ne permettent pas une telle configuration. C’est vraiment très facile de s’y retrouver. J'ai lu que certains paquets spécifiques à L4 pourraient avoir des problèmes avec une configuration comme celle-ci, mais je n'ai encore rien rencontré de tel.

Donc, commencez par installer L4 quelque part que vous aimez. J'ai aimé l'article que Niall a écrit sur la mise à jour de l'application de base L4, alors vérifiez-le: Installation et mise à jour Laravel 4

Je trouve que c’est suffisant pour cet exemple pour simplement cloner le référentiel (en supposant que vous avez installé le compositeur globalement, sinon, allez à http://getcomposer.org/ ):

git clone -b develop git://github.com/laravel/laravel.git app_name

compositeur php installer

Notez que nous sommes en train de cloner la branche develop, car L4 est toujours en version bêta pour le moment.

Donc, pour supprimer la partie "publique" de votre URL, déplacez simplement tous les fichiers et dossiers du public vers la racine de votre application et vous obtiendrez une structure de dossiers comme celle-ci:

/app
/bootstrap
/packages (copied from /public)
/vendor
.htaccess (copied from /public)
artisan
composer.json
favicon.ico (copied from /public)
index.php (copied from /public)
robots.txt (copied from /public)
server.php

Maintenant, nous devons éditer nos chemins dans index.php:

require __DIR__.'/bootstrap/autoload.php';

$app = require_once __DIR__.'/bootstrap/start.php';

Et ensuite, définissez le répertoire public dans le fichier /bootstrap/paths.php:

'public' => __DIR__.'/..',

c'est ma suggession

1

Étapes simples à suivre:

  1. Renommez server.php (dans le répertoire racine) en index.php
  2. Copier le fichier .htaccess du répertoire public vers le répertoire racine
1
Abhijeet Navgire

si vous supprimez public de l’url, déplacez d’abord le fichier index.php et le fichier .htaccess du dossier public vers la racine du fichier laravel et modifiez-le dans le fichier index.php 

require DIR. '/ ../bootstrap/autoload.php'; $ app = require_once DIR. '/ ../bootstrap/start.php';

à

require DIR. '/ bootstrap/autoload.php'; $ app = require_once DIR. '/ bootstrap/start.php';

et lancez le programme

0
Jalpesh Khakhi

Cela a déjà été demandé à plusieurs reprises. J'ai eu le même problème. Je l'ai résolu en utilisant vhosts et les fichiers .htaccess. Je voulais écrire sur la solution à la fois sur XAMPP sous Windows et sur l’installation de LAMP sur Ubuntu. Ma configuration sous Windows: Mon objectif était d’atteindre ma demande en entrant l’uri ci-dessous 

http://localhost/subdir

c:\xampp\htdocs\subdir\ # this was laravel root directory
c:\xampp\Apache\conf\extra\httpd-vhosts.conf # this virtual hosts file

J'ai utilisé le fichier .htaccess original du site Web Laravel (et rappelez-vous que le fichier .htaccess doit se trouver dans le répertoire public), mais je viens d'ajouter une ligne qui est

RewriteBase /subdir (just below RewriteEngine On)

De plus, dans le fichier httpd-vhosts, vous devez ajouter votre alias de sous-répertoire comme suit:

Alias /subdir
"C:/xampp/htdocs/subdir/public"
<Directory "C:/xampp/htdocs/subdir/public">
  Order allow,deny
  Allow from all
  Options All
  AllowOverride All
  Require all granted
</Directory>

J'espère que tout est clair avec mon explication. Cette réponse peut être appliquée facilement sur des systèmes basés sur Unix.

0
Emre Kayikcilar