在共享主机/CPanel主机上使用.htaccess在Laravel 9中从URL中删除public。
在共享主机/CPanel主机上使用.htaccess在Laravel 9中从URL中删除public。
我正在尝试在Cpanel共享主机上托管一个Laravel 9应用程序。然而,即使我尝试访问https://example.com/public
,应用程序仍然返回以下错误。下面是我的根目录下的.htaccess文件;它在Laravel 8中运行得很好,但现在不起作用了。我的问题是,我想通过域名访问我的应用程序,而不是使用/public
或/public.index.php
(例如,example.com)。
内部服务器错误 500
.htaccess
RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L]
在Laravel 9中如何从URL中去除public的问题
问题原因:在Laravel 9中,如果我们直接访问项目的URL,会发现URL中包含了public,这样的URL不够美观,因此我们希望能够去除URL中的public。
解决方法:
1. 在根目录下创建一个名为.htaccess的文件。
2. 在.htaccess文件中添加以下代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
3. 在根目录下创建一个名为server.php的文件。
4. 在server.php文件中添加以下代码:
$uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ); // This file allows us to emulate Apache's "mod_rewrite" functionality from the // built-in PHP web server. This provides a convenient way to test a Laravel // application without having installed a "real" web server software here. if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { return false; } require_once __DIR__.'/public/index.php';
以上就是解决在Laravel 9中如何去除URL中的public的方法。希望对大家有所帮助!
在Laravel 9中,如果在共享主机或CPanel主机上使用.htaccess,你可能会遇到从URL中删除public的问题。出现这个问题的原因是!^public
条件缺少斜杠前缀,导致这个条件始终成功,并且重复重写请求,可能导致重写循环(即500错误)。
解决这个问题的方法是在!^public
条件中添加斜杠前缀。修改后的代码如下:
RewriteCond %{REQUEST_URI} !^/public($|/)
RewriteRule ^(.*)$ public/$1 [L]
然而,你还应该在/public
子目录中有另一个.htaccess文件,其中包含管理通过Laravel应用程序的路由的mod_rewrite指令,这将防止重写循环发生。