我怎样才能删除“public / index.php”在URL生成laravel?

基本上我需要从laravel生成的URL中删除index.phppublic/index.php ,通常path是localhost/public/index.php/someWordForRoute ,它应该像localhost/someWordForRoute

htacces

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

应用程序/configuration/ app.php

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

我该如何改变?

选项1:使用.htaccess

如果它不在那里,请在Laravel根目录下创build一个.htaccess文件。 如果Laravel根目录不存在,请创build一个.htaccess文件。 (通常在你的public_html文件夹下)

编辑.htaccess文件,使其包含以下代码:

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

现在你应该可以访问没有“/public/index.php/”部分的网站。

选项2:将“/ public”目录中的内容移动到根目录

在根目录中创build一个新文件夹,并移动除公用文件夹之外的所有文件和文件夹。 你可以任意调用它。 我将使用“laravel_code”。

接下来,将所有内容移出公共目录并放到根文件夹中。 它应该导致一些有点类似于这个: 在这里输入图像描述

之后,我们所要做的就是编辑laravel_code/bootstrap/paths.php文件和index.php文件中的位置。

laravel_code/bootstrap/paths.phpfind以下代码行:

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

并将其更改为:

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

index.php ,find这些行:

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

并将其更改为:

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

来源: 如何从Laravel中删除/公开/ URL

我在Laravel 4.2上试过这个

将Laravel根文件夹中的server.php重命名为index.php ,并将.htaccess文件从/public目录复制到您的Laravel根文件夹。

我希望它的作品

这是简单的步骤来删除URL中的公开(Laravel 5)

1:复制公用文件夹中的所有文件,并将其放在laravel根文件夹中

2:打开index.php并更改

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

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

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

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

在laravel 4path2中是$app = require_once __DIR__.'/bootstrap/start.php'; 而不是$app = require_once __DIR__.'/bootstrap/app.php';/app.php

这就对了。

1)检查mod_rewrite是否启用。 转到/etc/apache2/mods-enabled目录,查看rewrite.load是否可用。 如果没有,使用命令sudo a2enmod rewrite启用它。它将启用重写模块。 如果它已经启用,它将显示消息Module rewrite already enabled
2)为公共目录创build一个虚拟主机,这样就可以像http://example.com/index.php一样使用http://localhost/public/index.php 。 [因此公用文件夹名称将被隐藏]
3)然后创build一个.htaccess这将隐藏index.php从你的url里面的根目录(公用文件夹)

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

这可能与Laravel和你的Apacheconfiguration无关。

你有访问你的Apache服务器configuration吗? 如果是这样,请从文档中查看:

一般来说,只有当您无法访问主服务器configuration文件时,才应该使用.htaccess文件。 例如,有一种常见的误解,认为用户身份validation应该始终在.htaccess文件中完成,而在最近几年,还有另一个误解,即mod_rewrite指令必须在.htaccess文件中进行。 这根本不是那么回事。 您可以将用户身份validationconfiguration置于主服务器configuration中,事实上,这是做事情的首选方式。 同样,在主服务器configuration中,mod_rewrite指令在许多方面工作得更好。

…一般来说,应尽可能避免使用.htaccess文件。 您可能会考虑放入.htaccess文件的任何configuration都可以在您的主服务器configuration文件的一个部分中进行。

来源: Apache文档 。

我之所以首先提到这一点,是因为如果可以,最好彻底摆脱.htaccess ,并在VirtualHost标签内使用Directory标签。 这就是说,其余的这一切将假设你无论出于何种原因都坚持使用.htaccess路线。

为了解决这个问题,可能会发生一些事情:

  1. 我注意到,也许毫无意义的是,你的文件在你的问题中被命名为.htacces 。 我的猜测是这是一个拼写错误,但是如果你忽略了这个错误,那实际上只是错过了第二个错误,这正是那种让我把头撞到墙上寻找更具挑战性的小错误。

  2. 您的服务器.htaccess 。 要检查这个,转到你的Apacheconfiguration文件。 在现代的Apache构build中,这通常不在一个configuration文件中,因此请确保您使用的是指向您的应用程序的地方。 更改

     AllowOverride none 

     AllowOverride all 

    作为后续,Apache文档还build议,出于安全的目的,如果您打算去.htaccess重写,则不要为每个文件夹执行此操作。 相反,请为需要添加.htaccess的文件夹执行此操作。

  3. 你有mod_rewrite启用? 这可能是导致问题。 我注意到你的标签在顶部<IfModule mod_rewrite.c> 。 尝试注释掉这些标签并重新启动Apache。 如果你得到一个错误,那么这可能是因为你需要启用mod_rewrite : 如何启用Apache 2.2的mod_rewrite

希望这可以帮助。 我已经列举了一些最常见的问题,但还有其他几个可能更为普通或独特的问题。 在开发服务器上的另一个build议? 重新安装Apache。 如果可能的话,从一个不错的教程,从不同的来源。

不要混淆下面的代码片段的其他选项我将使用,也将对你有用。 把下面的htacces放在你的根目录下。

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

去你的公共目录,并把下面的代码片段的另一个htaccess文件

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

它的工作…!

Laravel已经有一个漂亮的URL .htaccess了…你应该很好的去开箱… http://laravel.com/docs/installation#pretty-urls

确保mod_rewrite已启用,并且您的主path被设置为您的应用程序的公共目录。

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

在.htaccess中使用此并重新启动服务器

希望这有助于像我这样做。

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

将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/ public目录复制到您的Laravel根文件夹。 – 而已 !! 🙂

我刚安装了一个项目的Laravel 5,在根目录下有一个名为server.php的文件。 只要将其更改为index.php,它可以工作,或在terminal,键入

$ cp server.php index.php

对于Laravel 4&5:

  1. 将Laravel根文件夹中的server.php重命名为index.php
  2. 将.htaccess文件从/ public目录复制到您的Laravel根文件夹。

而已 !! 🙂

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

按照Laravel 5.3 ,上述事情将无法正常工作,但请冷静并遵循以下步骤:

步骤1.进入laravel项目的内部
第2步。使一个随机目录/文件夹例如。 laravelcode
第3步。移动所有文件夹和文件(公用文件夹除外)
第4步。将公用文件夹内的所有文件夹和文件移动到laravel项目
第5步。现在在laravel项目中有index.php文件,请打开它,并根据以前的新path更改bootstrap的文件夹path,这是“require DIR 。”/ .. / bootstrap / autoload.php';“ 现在它会变成“需要DIR 。”/ laravelcode / bootstrap / autoload.php';“

这就是运行你的url没有公共和index.php像下面http:// localhost / blog /