web-dev-qa-db-fra.com

Comment puis-je supprimer “public / index.php” dans l'URL Generated Laravel?

Je dois supprimer index.php ou public/index.php de l'URL générée dans Laravel; généralement chemin est localhost/public/index.php/someWordForRoute, il devrait être quelque chose comme localhost/someWordForRoute.

. htaccess

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

app/config/app.php

'url' => 'http://localhost',

Comment puis-je changer ça?

80
TuGordoBello

Option 1: Utiliser .htaccess

Si ce n'est déjà fait, créez un fichier .htaccess dans le répertoire racine Laravel. Créez un fichier .htaccess dans votre répertoire racine Laravel s'il n'existe pas déjà. (Normalement, il se trouve sous votre dossier public_html)

Editez le fichier .htaccess pour qu'il contienne le code suivant:

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

Vous devriez maintenant pouvoir accéder au site Web sans la partie "/public/index.php/".

Option 2: déplacez les éléments du répertoire '/ public' vers le répertoire racine

Créez un nouveau dossier dans votre répertoire racine et déplacez tous les fichiers et dossiers sauf les dossiers publics. Vous pouvez appeler ça comme vous voulez. Je vais utiliser "laravel_code".

Ensuite, déplacez tout du répertoire public vers le dossier racine. Cela devrait aboutir à quelque chose de similaire enter image description here

Après cela, tout ce que nous avons à faire est d’éditer les emplacements du fichier laravel_code/bootstrap/paths.php et du fichier index.php.

Dans laravel_code/bootstrap/paths.php, trouvez la ligne de code suivante:

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

Et changez les en:

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

Dans index.php, trouvez ces lignes:

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

Et changez les en:

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

Source: Comment supprimer/public/de l'URL de Laravel

119
Luzan Baral

J'ai essayé ceci sur Laravel 4.2

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

J'espère que ca fonctionne

39
Tejas Jadhav

Voici des étapes simples à suivre pour supprimer public en URL (Laravel 5)

1: Copier tous les fichiers du dossier public et les coller dans le dossier racine laravel

2: Ouvrez index.php et changez

De

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

Dans laravel 4 chemin 2 est $app = require_once __DIR__.'/bootstrap/start.php'; au lieu de $app = require_once __DIR__.'/bootstrap/app.php';/app.php

C'est ça.

13
Khandad Niazi

Ne vous méprenez pas avec l’option ci-dessous que j’utilise et qui vous sera utile aussi. Mettez les mots ci-dessous dans votre racine.

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

Allez dans votre répertoire public et mettez un autre fichier htaccess avec l'extrait de code ci-dessous

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

Ça marche... !!!

Laravel Utilise ci-dessous .htaccess

    # 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]
11
Ankit Vishwakarma

1) Vérifiez si mod_rewrite est activé. Allez dans le répertoire /etc/Apache2/mods-enabled et voyez si le rewrite.load est disponible. Sinon, activez-le à l'aide de la commande Sudo a2enmod rewrite. Il activera le module de réécriture. S'il est déjà activé, le message Module rewrite already enabled s'affichera.
2) Créez un hôte virtuel pour répertoire public afin qu'au lieu de donner http://localhost/public/index.php, nous pourrons utiliser comme ceci http://example.com/index.php. [donc le nom du dossier public sera masqué]
3) Créez ensuite un fichier .htaccess qui cachera le fichier index.php de votre URL qui doit se trouver dans le répertoire racine (dossier public).

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
10
Orchid

Cela a probablement très peu à voir avec Laravel et tout ce qui concerne vos configurations Apache.

Avez-vous accès à la configuration de votre serveur Apache? Si tel est le cas, consultez la documentation suivante:

En général, vous ne devez utiliser des fichiers .htaccess que lorsque vous n'avez pas accès au fichier de configuration du serveur principal. Par exemple, il existe une idée fausse commune selon laquelle l’authentification de l’utilisateur doit toujours être effectuée dans des fichiers .htaccess et, au cours des dernières années, une autre idée fausse selon laquelle les directives mod_rewrite doivent figurer dans des fichiers .htaccess. Ce n'est simplement pas le cas. Vous pouvez définir des configurations d’authentification d’utilisateur dans la configuration du serveur principal. C’est en fait la meilleure façon de procéder. De même, les directives mod_rewrite fonctionnent mieux, à bien des égards, dans la configuration du serveur principal.

... En général, l'utilisation des fichiers .htaccess doit être évitée autant que possible. Toute configuration que vous envisageriez de placer dans un fichier .htaccess peut également être effectuée de manière efficace dans une section du fichier de configuration de votre serveur principal.

Source: documentation Apache .

La première raison pour laquelle je mentionne cela est qu'il est préférable d'éliminer complètement .htaccess si vous le pouvez et d'utiliser une balise Directory à l'intérieur d'une balise VirtualHost. Cela étant dit, le reste de ceci va supposer que vous vous en tenez à la route .htaccess pour une raison quelconque.

Pour décomposer cela, quelques choses pourraient se passer:

  1. Je remarque, peut-être inutilement, que votre fichier s'appelle .htacces dans votre question. J'imagine que c'est une faute de frappe, mais vous l'avez peut-être oubliée et qu'il ne manque en fait que la deuxième seconde, c'est exactement le genre d'erreur mineure qui me laisserait me cogner la tête contre le mur à la recherche de quelque chose de plus stimulant. .

  2. Votre serveur ne peut pas autoriser .htaccess. Pour vérifier cela, allez dans votre fichier de configuration Apache. Dans les versions modernes d'Apache, cela ne se trouve généralement pas dans un fichier de configuration. Assurez-vous donc que vous utilisez celui qui pointe vers votre application, où qu'elle existe. Changement

    AllowOverride none
    

    à

    AllowOverride all
    

    En guise de suivi, les documents Apache recommandent également que, pour des raisons de sécurité, ne le fassiez pas pour tous les dossiers si vous envisagez de réécrire .htaccess. Faites-le plutôt pour les dossiers auxquels vous devez ajouter .htaccess.

  3. Avez-vous mod_rewrite activé? Cela pourrait être la cause des problèmes. Je remarque que vous avez la balise en haut <IfModule mod_rewrite.c>. Essayez de commenter ces balises et redémarrez Apache. Si vous obtenez une erreur, c'est probablement parce que vous devez activer mod_rewrite: Comment activer mod_rewrite pour Apache 2.2

J'espère que cela t'aides. J'ai cité certains des problèmes les plus courants, mais plusieurs autres pourraient être plus banals ou uniques. Une autre suggestion sur un serveur de dev? Réinstallez Apache. Si possible, faites-le à partir d'une source différente avec un bon tutoriel.

5
smcjones

Laravel est déjà livré avec une jolie URL .htaccess ... vous devriez être prêt à sortir de la boîte ... http://laravel.com/docs/installation#pretty-urls

Assurez-vous que mod_rewrite est activé et que votre chemin personnel est défini sur le répertoire public de votre application.

1
Kisuka

Pour Laravel 4 & 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 ça !! :)

1
Abhijeet Navgire

Pour ce faire, vous devez suivre les étapes suivantes:

  • Mappez votre domaine dans le dossier public de votre projet (c'est-à-dire/var/www/html/yourproject/public) (si vous utilisez linux)

  • Allez dans votre dossier public éditez votre fichier .htaccess ici

AddHandler application/x-httpd-php72 .php
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect non-www to www
    RewriteCond %{HTTP_Host} !^www\.
    RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

    # Redirect non-http to https
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

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

    # Remove index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
</IfModule>


  • Les trois dernières règles sont pour si vous accédez directement à une route sans https, cela protège cela.
1
Shahrukh Anwar

J'espère que cela aide comme ça l'a fait pour moi.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
0
Harry Bosh

Je viens d'installer Laravel 5 pour un projet et il y a un fichier dans la racine appelé server.php.

Changez-le en index.php et ça marche ou tapez dans le terminal:

$cp server.php index.php
0
Samuel Kwame Antwi
 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

 RewriteRule ^(.*)$ index.php/$1 [L]

utiliser ceci dans .htaccess et redémarrer le serveur

0
Arun

Assurez-vous également que le moteur de réécriture est activé après la modification du fichier .htaccess.

Sudo a2enmod rewrite
0
Rafik Bari

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

0
Rizwan Taj