我怎样才能删除“public / index.php”在URL生成laravel?
基本上我需要从laravel生成的URL中删除index.php
或public/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.php
find以下代码行:
'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
路线。
为了解决这个问题,可能会发生一些事情:
-
我注意到,也许毫无意义的是,你的文件在你的问题中被命名为
.htacces
。 我的猜测是这是一个拼写错误,但是如果你忽略了这个错误,那实际上只是错过了第二个错误,这正是那种让我把头撞到墙上寻找更具挑战性的小错误。 -
您的服务器
.htaccess
。 要检查这个,转到你的Apacheconfiguration文件。 在现代的Apache构build中,这通常不在一个configuration文件中,因此请确保您使用的是指向您的应用程序的地方。 更改AllowOverride none
至
AllowOverride all
作为后续,Apache文档还build议,出于安全的目的,如果您打算去
.htaccess
重写,则不要为每个文件夹执行此操作。 相反,请为需要添加.htaccess
的文件夹执行此操作。 -
你有
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:
- 将Laravel根文件夹中的server.php重命名为index.php
- 将.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 /