Comment puis-je supprimer "public/index.php" dans l'url générée laravel?
fondamentalement, je dois supprimer index.php
ou public/index.php
de l'URL générée dans laravel, généralement le chemin est localhost/public/index.php/someWordForRoute
, il devrait être quelque chose comme localhost/someWordForRoute
htacces
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ / [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 cela?
14 réponses
Option 1: Utiliser .htaccess
si elle n'est pas déjà là, créer un .fichier htaccess dans le répertoire racine de Laravel.
Créez un fichier .htaccess
dans votre répertoire Laravel root s'il n'existe pas déjà. (Normalement il est sous votre dossier public_html
)
Modifier la .fichier htaccess contenant le code suivant:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
Maintenant, vous devriez être en mesure d'accéder au site web sans l' "/public / index.php/".
Option 2: Déplacer des choses dans le répertoire '/ public' vers le répertoire racine
créer un nouveau dossier dans votre répertoire racine, et déplacez tous les fichiers et dossiers sauf le dossier public. Vous pouvez l'appeler ce que vous voulez. Je vais utiliser "laravel_code".
ensuite, déplacez tout hors du répertoire public et dans le dossier racine. Il devrait en résulter quelque chose de semblable à ceci::
après cela, tout ce que nous avons à faire est d'éditer les emplacements dans le fichier laravel_code/bootstrap/paths.php
et le fichier index.php
.
Dans laravel_code/bootstrap/paths.php
trouver la ligne de code suivante:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',
et les remplacer par:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',
Dans index.php
, de trouver dans ces lignes:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';
et les remplacer par:
require __DIR__.'/laravel_code/bootstrap/autoload.php';
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
J'ai essayé sur Laravel 4.2
renommez 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.
j'espère que cela fonctionne
voici des étapes simples pour supprimer PUBLIC dans URL (Laravel 5)
1: copier tous les fichiers du dossier public et les passer dans le dossier racine de laravel
2: Ouvrir un index.php et le changement
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 tout.
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. Si ce n'est pas le cas, activez-le en utilisant la commande sudo a2enmod rewrite
.Il activera le module de réécriture. Si son déjà activé, il affichera le message Module rewrite already enabled
.
2) Créer un hôte virtuel pour l'annuaire public de sorte qu'au lieu de donner http://localhost/public/index.php
nous serons en mesure d'utiliser comme cela http://example.com/index.php
. [donc le nom du dossier public sera caché]
3)Puis créer un .htaccess qui cache l'index.php de votre url qui devrait être dans le répertoire racine (dossier public)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/ [L]
ne pas confondre avec l'autre option l'extrait ci-dessous que j'utilise et sera utile pour vous aussi. Mettez les htacces ci-dessous dans votre racine.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/ [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= [PT,L]
</IfModule>
son fonctionnement... !!!
cela a probablement très peu à voir avec Laravel et tout à voir avec votre Apache configs.
avez-vous accès à la configuration de votre serveur Apache? Si c'est le cas, consultez le docs:
en général, vous ne devez utiliser .htaccess lorsque vous n'avez pas l'accès au fichier de configuration principal. Il est, par exemple, un idée fausse commune que l'authentification de l'utilisateur devrait toujours être faite dans .htaccess fichiers, et, plus récemment, une autre idée fausse que les directives mod_rewrite doivent entrer .fichiers htaccess. Ce n'est tout simplement pas cas. Vous pouvez mettre les configurations d'authentification de l'utilisateur configuration du serveur, et c'est, en fait, la meilleure façon de le faire chose. De même, les directives mod_rewrite fonctionnent mieux, dans de nombreux respecte, dans la configuration du serveur principal.
... En général, l'utilisation de .les fichiers htaccess doivent être évités lorsque possible. Tout configuration que vous envisageriez de mettre dans un .fichier htaccess, peut effectivement être faites dans une section dans le fichier de configuration principal.
Source: documentation Apache .
la raison pour laquelle je mentionne cette première est parce qu'il est préférable de se débarrasser de .htaccess
complètement si vous pouvez,et utiliser une étiquette Directory
à l'intérieur d'une étiquette VirtualHost
. Ceci étant dit, le reste de ceci va supposer que vous vous en tenez à la route .htaccess
pour quelque raison que ce soit.
pour décomposer cela, quelques choses pourraient se passer:
-
je note, peut-être inutilement, que votre dossier est appelé
.htacces
dans votre question. À mon avis, c'est une faute de frappe, mais à la moindre occasion, vous l'avez oubliée et il ne manque que les secondes, 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 difficile. -
votre serveur ne pouvait pas autoriser
.htaccess
. Pour vérifier cela, allez dans votre fichier de configuration Apache. Moderne Apache construit ce n'est généralement pas dans un fichier de config donc, assurez-vous d'utiliser celui qui points à votre application, partout où elle existe. ChangementAllowOverride none
à
AllowOverride all
comme suivi, les documents Apache aussi recommandez que, pour des raisons de sécurité, vous ne faites pas cela pour chaque dossier si vous allez à aller pour
.htaccess
pour réécrire. Au lieu de cela, faites-le pour les dossiers auxquels vous devez ajouter.htaccess
. -
avez-vous activé
mod_rewrite
? Qui pourrait être la cause des problèmes. Je remarque que vous avez l'étiquette en haut<IfModule mod_rewrite.c>
. Essayez de commenter ces balises et redémarrez Apache. Si vous obtenez une erreur, alors c'est probablement parce que vous avez besoin d'activermod_rewrite
: comment activer mod_rewrite pour Apache 2.2
Espérons que cette aide. J'ai nommé certaines des questions les plus communes, mais il y en a plusieurs autres qui pourraient être plus banales ou uniques. Une autre suggestion sur un serveur dev? Ré-installer Apache. Si possible, faites-le à partir d'une autre source avec un bon tutoriel.
Laravel est livré avec une jolie URL .htaccess déjà... ça devrait être bon de sortir de la boîte... http://laravel.com/docs/installation#pretty-urls
assurez-vous que mod_rewrite est activé et que votre chemin d'accès est défini dans le répertoire public de votre application.
Pour Laravel 4 & 5:
- renommer le serveur.php dans votre répertoire racine Laravel pour indexer.php
- bien reçu .le fichier htaccess du répertoire /public vers votre répertoire racine Laravel.
c'est ça !! :)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/ [L]
utilisez ceci dans .htaccess et redémarrez le serveur
J'espère que ça m'aidera comme ça m'a aidé.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/ [L]
</IfModule>
renommer le serveur.php dans le dossier racine de votre Laravel pour indexer.php et copiez le .le fichier htaccess du répertoire /public vers votre répertoire racine Laravel. -- C'est ça !! :)
je viens d'installer Laravel 5 pour un projet et il y a un fichier à la racine appelé server.php
.
remplacer par index.php
et il fonctionne ou taper dans le terminal:
$cp server.php index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(public)/(index.php)/$ / [L]
</IfModule>
selon Laravel 5.3 les choses ci-dessus ne fonctionneront pas correctement, mais s'il vous plaît soyez calme et suivez les étapes ci-dessous:
Étape 1. Aller à l'intérieur du projet laravel
Étape 2. Créer un répertoire/Dossier aléatoire par exemple. laravelcode
Étape 3. Déplacer tout le dossier et les fichiers (sauf public dossier)
Étape 4. Déplacer tous les dossiers et les dossiers qui sont à l'intérieur public le dossier à la laravel projet
Étape 5. Maintenant, dans le projet laravel, il y a index.php fichier, s'il vous plaît ouvrir que et de changer les chemins de chemise pour bootstrap selon le nouveau chemin comme précédemment il était "require DIR ."/ ../ bootstrap / autoload.php';" maintenant, il deviendra à "exiger DIR ."/laravelcode/bootstrap / autoload.php'; "
C'est ça, lancez votre url sans public et index.php comme ci-dessous http://localhost/blog /