[php] Laravel 5 - Supprimer le public de l'URL



Answers

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

  1. Renommer le fichier server.php en index.php (aucune modification)
  2. Copiez le .htaccess du dossier public au dossier racine (comme rimon.ekjon dit ci-dessous)
  3. Changer .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 y a d'autres fichiers statiques nécessaires ajoutez simplement l'extension à la liste précédente

Question

Je sais que c'est une question très populaire mais je n'ai pas été capable de trouver une solution de travail pour Laravel 5. J'ai essayé de migrer depuis Codeigniter depuis longtemps, mais ce processus d'installation alambiqué ne cesse de me rebuter.

Je ne veux pas faire fonctionner une VM, cela me semble bizarre quand je change de projet.

Je ne veux pas mettre mon document racine dans le dossier public, c'est aussi gênant lors d'un changement de projet.

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 7610 compiled.php.

Lorsque j'ai essayé L4 il y a un certain temps, j'ai utilisé la méthode de déplacement du contenu du dossier public dans la racine. La structure de L5 est assez différente et suivant les mêmes étapes complètement cassé Laravel (le serveur ne retournerait qu'une page blanche).

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

  1. Fonctionne avec L5
  2. Permet de passer facilement d'un projet à l'autre (je travaille habituellement sur 2 ou 3 à la fois).

Merci

** J'utilise MAMP et PHP 5.6.2




Dans Laravel 5.5, créez un fichier .htacess dans votre répertoire racine et placez le code suivant: - Lien de référence

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



Même si ces solutions fonctionnent pour vous, je vous demanderais de ne pas suivre cela. Voici la raison pour laquelle.

Vous devez pointer votre racine d'hôte Apache vers le $LARAVEL_PATH/public au lieu de $LARAVEL_PATH .

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

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

Si vous utilisez un hébergement partagé et que vous avez un public_html obligatoire, essayez d'installer Laravel en dehors de ce répertoire public_html et de supprimer public_html (si vide) et remplacez-le par un lien symbolique vers $LARAVEL_PATH/public OU si vous voulez que l'instance Laravel soit sous-répertoire de public_html , faites de même mais créez un lien symbolique à partir de $LARAVEL_PATH/public vers public_html/$PROJECT_SUBDIR .

Ce répertoire public est là pour des raisons de rendre le projet un peu plus sécurisé. Résolvez le problème réel et n'essayez pas de casser cette addition de sécurité simple mais agréable. :)

J'espère que cela t'aides.




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

étape 2:

copier le fichier .htaccess du répertoire public à root directement




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

étape 1 copier tous les fichiers du public et coller dans le répertoire racine

étape 2 ouvrir le 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.




Je voudrais ajouter à @Humble Learner et noter que l'emplacement correct pour "réparer" le chemin de l'URL pour les actifs est /Illuminate/Routing/UrlGenerator.php/asset ().

Mettez à jour la méthode pour qu'elle corresponde:

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 va corriger les scripts, les styles et les chemins d'image. Tout pour les chemins d'actifs.




Il y a toujours une raison d'avoir un dossier public dans la configuration de Laravel, tous les documents publics doivent être présents dans le dossier public,

Ne pointez pas votre adresse IP / domaine vers le dossier racine de Laravel mais pointez le vers le dossier public. Il est dangereux de pointer le serveur Ip vers le dossier racine., Car si vous n'écrivez pas de restrictions dans .htaccess , vous pouvez 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 qui ajoute du public dans la route sera résolu.




 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) 



@ rimon.ekjon a déclaré:

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

Cela fonctionne pour moi. Mais tous les fichiers de ressources dans le répertoire / public n'ont pas pu trouver et les URL de demande 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.




J'ai lu un article avant et ça marche bien, mais je ne sais vraiment pas est sûr ou pas

    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. 

Editez l'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';





Related