如何在生成的Laravel URL中删除“public/index.php”?
如何在生成的Laravel URL中删除“public/index.php”?
我需要在Laravel中的生成的URL中删除index.php
或public/index.php
,通常路径是localhost/public/index.php/someWordForRoute
,应该像localhost/someWordForRoute
这样。\n.htaccess\n
Options -MultiViews 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]
\napp/config/app.php\n
'url' => 'http://localhost',
\n我该如何更改?
在Laravel中生成的URL中出现“public/index.php”的问题是由于默认情况下,Laravel将公共目录设置为网站的根目录,因此在URL中会包含“public/index.php”。
解决这个问题的方法是通过修改.htaccess文件来重写URL。首先,在网站的根目录下创建一个.htaccess文件,将以下代码添加到文件中:
RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L]
然后,进入public目录,创建另一个.htaccess文件,并将以下代码添加到文件中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
这样配置后,Laravel生成的URL中将不再包含“public/index.php”。在.htaccess文件中,使用了mod_rewrite模块来重写URL。第一个.htaccess文件将所有请求重写到public目录,而第二个.htaccess文件将请求重写到index.php文件。
这种方法的优点是可以隐藏URL中的“public/index.php”,使URL更加简洁。然而,这种方法也存在一些缺点,例如可能会导致URL重写问题和性能损失。
在Laravel 9中,这是唯一的选项来解决URL中出现“public/index.php”的问题。
如何在Laravel生成的URL中去除“public/index.php”?
问题出现的原因:
在Laravel中,默认情况下,所有的请求都会经过public/index.php文件。这样做是为了增强安全性和保护应用程序的核心文件。但是,对于一些特定需求的项目来说,希望能够直接访问网站而不需要在URL中包含“public/index.php”。
解决方法一:使用.htaccess文件
1. 在Laravel根目录下创建一个.htaccess文件。
2. 编辑.htaccess文件,添加以下代码:
RewriteEngine On RewriteRule ^(.*)$ public/$1 [L]
3. 这样,你就可以在不包含“/public/index.php/”的情况下访问网站了。
解决方法二:将文件移动到根目录
1. 在根目录下创建一个新的文件夹,将除了public文件夹以外的所有文件和文件夹移动到这个文件夹中。
2. 将public文件夹中的所有内容移动到根目录中。
3. 编辑laravel_code/bootstrap/paths.php文件,将以下代码修改为:
'app' => __DIR__.'/../app', 'public' => __DIR__.'/../../',
4. 编辑index.php文件,将以下代码修改为:
require __DIR__.'/laravel_code/bootstrap/autoload.php'; $app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
这样,你就可以在不包含“/public/index.php/”的情况下访问网站了。
通过以上两种方法,你可以轻松地去除Laravel生成的URL中的“public/index.php”。如果你使用的是Debian Linux系统,还需要编辑etc/apache2/apache2.conf文件,将其中的AllowOverride None修改为AllowOverride All。
请注意,将public文件夹移动到根目录的方法不适用于生产环境,因为public文件夹的存在是有原因的。
参考来源:How to remove /public/ from URL in Laravel