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:
Merci
** J'utilise MAMP et PHP 5.6.2
server.php
dans votre dossier racine Laravel en index.php
.htaccess
du répertoire /public
dans votre dossier racine Laravel C'est tout!
J'ai résolu le problème en utilisant 2 réponses:
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
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>
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';
@ 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.
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
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.
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é. :)
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.
Supposons que vous ayez placé tous les autres fichiers et répertoires dans un dossier nommé "locale".
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';
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 :)
Je viens de renommer server.php
en index.php
et cela fonctionne
Cela fonctionne bien pour toutes les versions de laravel ...
Voici ma structure de répertoire,
/laravel/
... app
... bootstrap
... public
... etc
Suivez ces étapes faciles
requireDIR. '/ ../bootstrap/autoload.php';
à
requireDIR. '/ bootstrap/autoload.php';
et
$ app = require_onceDIR. '/ ../bootstrap/start.php';
à
$ app = require_onceDIR. '/ bootstrap/start.php';
'public' =>DIR. '/ ../public',
à
'public' =>DIR. '/ ..',
et voilà, maintenant essayez http: // localhost/laravel /
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.
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!
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!
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.
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.
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:
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.
Accédez à C:/xampp/Apache/conf/extra
ou à l’endroit où se trouvent vos fichiers XAMPP.
Ouvrez le fichier nommé httpd-vhosts.conf avec un éditeur de texte.
Autour de la ligne 19, recherchez # NameVirtualHost *:80
et décommentez ou supprimez le hachage.
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>
<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>
C:/Windows/System32/drivers/etc/hosts
, où hôtes est le fichier. Ouvrez-le avec le bloc-notes.127.0.0.1 localhost
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.
L'article original peut être trouvé ici
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.local
et 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
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"
.
<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
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:
ouvrir vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
aller à la ligne 130
écrire "public/".$path
au lieu de $path
,
function asset($path, $secure = null){
return app('url')->asset("public/".$path, $secure);
}
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
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.
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';
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.
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)
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>
Ajoutez ces lignes dans votre dossier racine htaccess, qui effectue le travail RewriteEngine sur RewriteCond% {REQUEST_URI}! Public/RewriteRule (. *)/Public/$ 1 [L]
##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>
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]
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.
é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
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>