web-dev-qa-db-fra.com

Laravel 5 - Supprimer le public de l'URL

Je sais que cette question est très populaire, mais je n’ai pas trouvé de solution efficace pour Laravel 5. Cela fait longtemps que je tente de migrer de Codeigniter, mais cette procédure d’installation compliquée continue à me décourager.

Je ne veux pas exécuter de machine virtuelle, cela me semble gênant lorsque je change de projet.

Je ne souhaite pas définir la racine de mon document dans le dossier public, cela est également gênant lors du basculement entre projets.

J'ai essayé la méthode .htaccess mod_rewrite

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

Cela me donne juste une exception Laravel NotFoundHttpException dans la ligne compiled.php 7610.

Lorsque j'ai essayé L4 il y a quelque temps, j'ai utilisé la méthode de déplacement du contenu du dossier public vers la racine. La structure de L5 est très différente et suivre les mêmes étapes a complètement rompu Laravel (le serveur ne renverrait qu'une page vierge).

Existe-t-il une méthode décente pour supprimer le «public» dans un environnement de développement qui:

  1. Fonctionne avec L5
  2. Me permet de basculer facilement entre les projets (je travaille habituellement sur 2 ou 3 à la fois).

Merci

** J'utilise MAMP et PHP 5.6.2

184
user1537360

Pour Laravel 5:

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

C'est tout!

368
Asfaq Tamim

J'ai résolu le problème en utilisant 2 réponses:

  1. Renommer le server.php en index.php (aucune modification)
  2. Copiez le .htaccess du dossier public vers le dossier racine .__ (comme le dit rimon.ekjon ci-dessous)
  3. Changer le .htaccess un peu comme suit pour la statique:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    

    S'il existe d'autres fichiers statiques nécessaires, ajoutez simplement l'extension à la liste déclarée précédente

108
ka_lin

Dans Laravel 5.5, créez un fichier .htaccess dans votre répertoire racine et placez le code suivant: - Reference Link

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

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>
48
Raham

Un moyen facile de supprimer public de laravel 5 url . Il vous suffit de couper index.php et .htaccess du répertoire public et de le coller dans le répertoire racine, c'est tout.

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
42
Muhammad Sadiq

@ rimon.ekjon a dit:

Renommez le fichier server.php dans le dossier racine de votre Laravel en index.php et copiez le fichier .htaccess du répertoire/public dans votre dossier racine de Laravel. -- C'est tout !! :)

Cela fonctionne pour moi . Mais tous les fichiers de ressources dans le répertoire/public n'ont pas pu être trouvés et les URL de requête n'ont pas fonctionné, car j'ai utilisé asset () helper.

J'ai changé la fonction /Illuminate/Foundation/helpers.php/asset () comme suit:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

Maintenant tout fonctionne :)

Merci @ rimon.ekjon et à vous tous.

35
Miron

1) Je n'ai pas trouvé de méthode de travail pour déplacer le répertoire public dans L5 . Bien que vous puissiez modifier certaines choses dans le code d'amorçage index.php, il apparaît que plusieurs fonctions d'assistance sont basées sur l'hypothèse de la présence de ce répertoire public. En toute honnêteté, vous ne devriez vraiment pas déplacer le répertoire public.

2) Si vous utilisezMAMP, vous devriez créer de nouveaux hôtes virtuels pour chaque projet, chacun servant le répertoire public de ce projet. Une fois créé, vous accédez à chaque projet par le nom de serveur défini, comme suit:

http://project1.dev
http://project2.dev
23
Jeremy Schaffer

Il suffit de créer .htaccess fichier à la racine et d’ajouter ces lignes

<IfModule mod_rewrite.c>
    RewriteEngine On

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

C'est tout!

Le code ci-dessus fonctionne sur le dossier racine public_html. Cela dit, votre fichier core laravel doit se trouver dans le dossier public_html. Si votre répertoire ressemble à public_html/laravelapp/public et si vous mettez le code ci-dessus dans laravelapp, il ne fonctionnera pas. Par conséquent, vous devez copier tous vos fichiers core dans public_html et y placer le fichier .htaccess.

Si vous souhaitez conserver le code dans un sous-répertoire, vous pouvez créer un sous-domaine. Ce code fonctionnera également pour cela.

19
Abhinav Saraswat

Même si les solutions mentionnées dans ce fil fonctionnent pour vous, je vous prie de ne pas le faire. Voici la raison pour laquelle.

Vous devriez pointer la racine de votre hôte Apache sur le répertoire $LARAVEL_PATH/public au lieu de $LARAVEL_PATH

Le point d’avoir un sous-répertoire pour la racine de l’hôte www au lieu de la racine du projet est que vous ne perdez aucun de vos fichiers de projet via votre serveur Web.

Même si tous les fichiers PHP portent le suffixe .php, un utilisateur malveillant peut accéder à votre répertoire $LARAVEL_PATH/storage et à son contenu, lire votre composer.json ou package.json pour rechercher des dépendances vulnérables ou lire le fichier .env, etc.

Si vous utilisez un hébergement partagé et que vous avez obligatoire public_html, essayez d'installer Laravel en dehors de ce répertoire public_html, en supprimant public_html (s'il est vide) et en le remplaçant par un lien symbolique vers $LARAVEL_PATH/public OR si vous souhaitez que l'instance de Laravel sous-répertoire de public_html, faites de même, mais créez un lien symbolique de $LARAVEL_PATH/public à public_html/$PROJECT_SUBDIR

Ce répertoire public est là pour des raisons de sécuriser un peu le projet. Résolvez le problème et n'essayez pas de casser ce simple ajout de sécurité. :)

15

Il est possible de supprimer public url dans laravel5. Suivez ces étapes:

étape 1.copiez tous les fichiers de public et collez-les dans root

étape 2.ouverture du fichier index.php remplacer par

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

à 

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

et 

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

à 

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

Et supprimez tout le cache et les cookies.

12
piyush patel

Supposons que vous ayez placé tous les autres fichiers et répertoires dans un dossier nommé "locale".

enter image description here

Allez juste à index.php et trouvez ces deux lignes:

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

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

et changez les en ceci:

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

$app = require_once __DIR__.'/locale/bootstrap/app.php';
11

Approche BEST: Je ne recommanderai pas de supprimer public, au lieu de on local computer create a virtual Host point to public directory et on remote hosting change public to public_html and point your domain to this directory. 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:

Cela fonctionne bien pour toutes les versions de laravel ...

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 /

8
Wasim A.

Je voudrais ajouter à @Humble Learner et noter que l'emplacement approprié pour "réparer" le chemin d'URL des ressources est /Illuminate/Routing/UrlGenerator.php/asset ().

Mettez à jour la méthode pour correspondre à:

public function asset($path, $secure = null)
{
    if ($this->isValidUrl($path)) return $path;
    $root = $this->getRootUrl($this->getScheme($secure));
    return $this->removeIndex($root).'/public/'.trim($path, '/');
}

Cela corrigera les scripts, les styles et les chemins d’image. N'importe quoi pour les chemins d'actifs. 

6
Sean Perkins

Voici la solution la meilleure et la plus courte qui fonctionne pour moi à partir du mai 2018 Pour Laravel 5.5

1- Il suffit de couper votre fichier .htaccess du répertoire/public dans le répertoire racine et de le remplacer par le code suivant:

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

    RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

</IfModule>

2- Sauvegardez simplement le fichier .htaccess et c'est tout.

3- Renommez votre fichier server.php en index.php. c'est tout profitez-en!

5
tony pro

Ne pas:

Vous ne devriez vraiment pas renommer server.php dans votre dossier racine Laravel en index.php Et copier le fichier .htaccess du répertoire/public dans votre dossier racine Laravel!

De cette façon, tout le monde peut accéder à certains de vos fichiers (.env par exemple). Tu ne veux pas ça!


Faire:

Au lieu de cela, vous devriez créer un fichier .htaccess dans votre racine comme ceci:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

C'est tout.

4
Derk Jan Speelman

Il y a toujours une raison d'avoir un dossier public dans la configuration de Laravel, tous les éléments liés au public doivent être présents dans le dossier public, 

Ne pointez pas votre adresse IP/domaine sur le dossier racine de Laravel mais sur le dossier public. Il est dangereux de pointer le serveur IP vers le dossier racine. En effet, à moins d'écrire des restrictions dans .htaccess, on peut facilement accéder aux autres fichiers., 

Il suffit d'écrire la condition de réécriture dans le fichier .htaccess et d'installer le module de réécriture et d'activer le module de réécriture, le problème de l'ajout public à l'itinéraire sera résolu.

4
Reiah Paul Sam

Pour que l’utilisateur XAMPP supprime public de l’url sans toucher au système de fichiers par défaut de Laravel, vous devez définir un hôte virtuel pour que votre application le fasse. Pour ce faire, procédez comme suit:

  1. Ouvrez l'application du panneau de contrôle XAMPP et arrêtez Apache. Sachez que les dernières machines Windows peuvent l'exécuter en tant que service, cochez donc la case située à gauche du module Apache.

  2. Accédez à C:/xampp/Apache/conf/extra ou à l’endroit où se trouvent vos fichiers XAMPP.

  3. Ouvrez le fichier nommé httpd-vhosts.conf avec un éditeur de texte.

  4. Autour de la ligne 19, recherchez # NameVirtualHost *:80 et décommentez ou supprimez le hachage.

  5. Tout en bas du fichier, collez le code suivant: 

<VirtualHost *>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs" # change this line with your htdocs folder
    ServerName localhost
    ServerAlias localhost
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks Includes ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. Vous pouvez maintenant copier et coller le code ci-dessous pour ajouter vos répertoires d’hôte virtuel. Par exemple, je travaille sur un site appelé Eatery Engine, de sorte que le fragment de code suivant me permet de travailler avec des sous-domaines sur mon installation locale: 
<VirtualHost eateryengine.dev>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs/eateryengine" # change this line with your htdocs folder
    ServerName eateryengine.dev
    ServerAlias eateryengine.dev
    <Directory "C:/xampp/htdocs/eateryengine">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. Ensuite, rendez-vous sur votre fichier hôte Windows pour modifier vos hôtes. le fichier sera situé à C:/Windows/System32/drivers/etc/hosts, où hôtes est le fichier. Ouvrez-le avec le bloc-notes.
  2. Recherchez la résolution de noms #localhost est gérée dans le DNS même.

127.0.0.1 localhost

la résolution du nom d'hôte local est gérée dans le DNS même.

127.0.0.1       localhost
127.0.0.1       eateryengine.dev #change to match your Virtual Host.
127.0.0.1       demo.eateryengine.dev #manually add new sub-domains.
  1. Redémarrez Apache et testez tout.

L'article original peut être trouvé ici

4
sunny kashyap

4 meilleures façons de supprimer public de l'URL.

Si vous avez utilisé une autre astuce pour supprimer le public de l'URL, changez le nom server.php en index.php et changez le chemin du fichier principal. Clairement, ne fais pas ça. Alors pourquoi Laravel ne donne pas la solution de la sorte, car ce n’est pas une bonne façon de le faire.

1) Supprimez public de l'URL à l'aide de htaccess dans Laravel

En ajoutant un fichier .htaccess à la racine, vous pouvez accéder au site Web sans passer par le public.

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

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</ifmodule>

2) Supprimez le public en créant un hôte virtuel dans votre local

Je donne la démo ici pour le système d'exploitation Windows. Mais je vais essayer de définir une étape pour que tout le monde puisse facilement la suivre. Vous pouvez également rechercher sur Google pour les mêmes pour le système d'exploitation particulier.

Étape 1: Allez dans C:\Windows\system32\drivers\etc\ouvrez le fichier "hosts" en mode Administrateur.

Étape 2: Ajoutez-y le code suivant. Ici, je vous présente une démonstration de la démonstration de nom de domaine projectname.local, que vous pouvez spécifier à votre guise. Rendez-le constant à chaque endroit.

127.0.0.1  projectname.local

Étape 3: Maintenant, allez à C:\xampp\Apache\conf\extra pour les utilisateurs xampp et pour l'utilisateur wamp "C:\wamp\bin\Apache\Apache2.4.4\conf\extra" et ouvrez le fichier "httpd-vhosts.conf". Ajoutez maintenant le code suivant.

Notes: _ Modifiez la racine du document selon votre projet et ajoutez également le nom de domaine que vous avez défini dans le fichier "hôtes".

<VirtualHost projectname.local>
      ServerAdmin projectname.local
      DocumentRoot "C:/xampp/htdocs/projectdir"
      ServerName projectname.local
      ErrorLog "logs/projectname.local.log"
      CustomLog "logs/projectname.local.log" common
 </VirtualHost>

Étape 4: Dernière étape, mais l’importante est de redémarrer votre Xampp ou Wamp et d’avoir accès à l’URL telle quehttp://projectname.localet votre Laravel répondra sans URL publique.


3) Supprimez le public en exécutant la commande dans Laravel

Si vous travaillez en local, vous n'avez rien besoin de faire, il vous suffit d'exécuter la commande suivante à partir de votre terminal ou de votre outil de ligne de commande. Après cela, vous pouvez accéder à votre site Web à l'aide de l'URL fournie à l'aide de la ligne de commande.

   > php artisan serve

Si vous êtes prêt à exécuter votre projet sur une adresse IP particulière, vous devez exécuter la commande suivante. Si vous travaillez sur un réseau local, si vous souhaitez autoriser d'autres personnes à accéder à votre site Web à partir d'un réseau local, il vous suffit de vérifier votre adresse IP à l'aide de la ligne de commande en exécutant "ipconfig" après avoir exécuté votre adresse IP en suivant la commande.

> php artisan serve --Host=192.168.0.177

Si vous souhaitez exécuter votre projet sur une adresse IP particulière avec un port particulier, vous devez exécuter la commande suivante.

> php artisan serve --Host=192.168.0.177 --port=77

4) Supprimez le public sur le serveur hébergé ou sur le cpanel

 enter image description here 

Une fois le projet terminé, vous devez héberger le projet sur le serveur. Il vous suffit ensuite de définir la racine du document de votre domaine sur le dossier public. Vérifiez la capture d'écran ci-dessous.

Comme dans la capture d'écran, si vous n'avez pas de dossier de projet dans public_html, il vous suffit de définir la racine de votre document comme suit: "public_html/public".

3
Mayank Dudakiya
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteRule ^(.*)$ public/$1 [L]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

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

Activer le module mod_rewrite avec

Sudo a2enmod rewrite

et redémarrez Apache

Sudo service Apache2 restart

Pour utiliser mod_rewrite à partir de fichiers .htaccess (ce qui est un cas très courant), éditez le VirtualHost par défaut avec

Sudo nano /etc/Apache2/sites-available/000-default.conf

Sous "DocumentRoot/var/www/html", ajoutez les lignes suivantes:

<Directory "/var/www/html">
AllowOverride All
</Directory>

Redémarrez à nouveau le serveur:

Sudo service Apache2 restart
2
mujuonly

Tout d'abord, vous pouvez utiliser cette procédure

Pour Laravel 5:

1. Renommez server.php dans votre dossier racine Laravel en index.php 

2. Copiez le fichier .htaccess du répertoire/public dans votre dossier racine Laravel. 

source: https://stackoverflow.com/a/28735930

après avoir suivi ces étapes, vous devez changer tous les chemins css et scripts, mais cela sera fatigant.

Proposition de solution: vous pouvez simplement modifier légèrement la fonction helpers::asset.

Pour ça:

  1. ouvrir vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

  2. aller à la ligne 130 

  3. écrire "public/".$path au lieu de $path

    function asset($path, $secure = null){
       return app('url')->asset("public/".$path, $secure);
    }
    
2
Ferhat KOÇER

Le problème est que si vous tapez/public et qu'il sera toujours disponible dans l'URL, j'ai donc créé un correctif qui devrait être placé dans le fichier public/index.php

  $uri = urldecode(
     parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
  );

  if(stristr($uri, '/public/') == TRUE) {

    if(file_exists(__DIR__.'/public'.$uri)){

    }else{

      $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_Host']}{$_SERVER['REQUEST_URI']}";
      $actual_link = str_replace('public/', '',$actual_link);
      header("HTTP/1.0 404 Not Found");
      header("Location: ".$actual_link."");
      exit();
      return false;
   }}

cette paix de code supprimera public de l'URL et donnera un 404, puis redirigera vers l'URL sans le public

1
Paul De Zwaan

Une autre méthode que j'utilise consiste à créer un lien symbolique (sous Linux, je ne connais pas Win) à l'aide de la commande ln dans htdocs ou www i.e. ln projectname/public project Le site est donc accessible via localhost/project.

1
Eli Makumba

J'ai lu des articles auparavant et ça fonctionne bien, mais je ne sais vraiment pas si c'est sûr ou non

    a. Create new folder local.
    b. Move all project into the local folder expect public folder.
    c. Move all the content of public folder to project root.
    d. Delete the blank public folder
    f. Edit the index file. 

Editer le index.php

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

à

require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';
1
Yousef Altaf

Même si je ne recommande pas de mettre Laravel sur le dossier racine, il y a des cas où cela ne pourrait pas être évité; Pour ces cas, les méthodes ci-dessus ne fonctionnent pas pour les actifs, j'ai donc fait une solution rapide en modifiant htaccess: après avoir copié server.php sur index.php, éditez le fichier .htaccess comme suit:

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

    RewriteEngine On

    ### fix file rewrites on root path ###
    #select file url
    RewriteCond %{REQUEST_URI} ^(.*)$
    #if file exists in /public/<filename>
    RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
    #redirect to /public/<filename>
    RewriteRule ^(.*)$ public/$1 [L]
    ###############

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...

    #RewriteCond %{REQUEST_FILENAME} -d # comment this rules or the user will read non-public file and folders!
    #RewriteCond %{REQUEST_FILENAME} -f #
    RewriteRule ^ index.php [L]
</IfModule>

C’était une solution rapide que j’avais à faire pour que tout le monde soit le bienvenu pour le mettre à niveau.

1
Plokko
 You can follow only 2 step


 1- cut .htaccess from public folder and paste to root(mainFolder)  
 2- Rename server.php file to index.php AT your root dir. (mainFolder) 
0
Yagnesh bhalala

Vous n'avez pas besoin de faire beaucoup, créez simplement un fichier .htaccess dans le répertoire racine et collez/enregistrez le fichier ci-dessous;

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

Ajoutez ces lignes dans votre dossier racine htaccess, qui effectue le travail RewriteEngine sur RewriteCond% {REQUEST_URI}! Public/RewriteRule (. *)/Public/$ 1 [L]

0
Yugaprashanthan
##Create .htaccess file in root directory and place code something like below.

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

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>
0
Pallav Nagar

j'ai essayé une solution ici et trouvé htaccess qui fonctionne pour Laravel 5.2, comme ceci:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]



RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
RewriteRule ^.env - [F,L,NC]
RewriteRule ^app - [F,L,NC]
RewriteRule ^bootstrap - [F,L,NC]
RewriteRule ^config - [F,L,NC]
RewriteRule ^database - [F,L,NC]
RewriteRule ^resources - [F,L,NC]
RewriteRule ^vendor - [F,L,NC]

lorsque vous avez un autre fichier ou dossier à interdire, ajoutez simplement

RewriteRule ^your_file - [F,L,NC]
0
adam

Vous pouvez supprimer le mot clé public de l'URL en utilisant différentes méthodes.

1) Si vous utilisez un hébergement dédié et que vous avez un accès root, vous pouvez supprimer le mot-clé public de l'URL à l'aide de Virtual Host. Vous devriez donner le chemin DocumentRoot avec public. Donc, cela va démarrer index à partir du répertoire public et le supprimer de l'URL.

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/{yoursourcedirectory}/public

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>

2) Si vous n'avez pas d'accès root à votre hébergement, vous devriez générer un nouveau fichier .htaccess dans votre répertoire racine et mettre le code comme ci-dessous

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

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>

Vous pouvez obtenir plus référence ici.

0
Vinod Joshi

étape 1: le fichier server.php du répertoire racine est renommé index.php

étape 2:

copier le fichier .htaccess du répertoire public à la racine directe

0

J'ai trouvé la solution la plus efficace pour résoudre ce problème. Il suffit de modifier votre fichier .htaccess dans le dossier racine et d’écrire le code suivant. Rien d'autre requis

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

<IfModule php7_module>
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit -1
   php_value post_max_size 8M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php71"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>
0
AKHIL RAJ