在共享主机/CPanel主机上使用.htaccess在Laravel 9中从URL中删除public。

15 浏览
0 Comments

在共享主机/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]

0
0 Comments

在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的方法。希望对大家有所帮助!

0
0 Comments

在Laravel 9中,如果在共享主机或CPanel主机上使用.htaccess,你可能会遇到从URL中删除public的问题。出现这个问题的原因是!^public条件缺少斜杠前缀,导致这个条件始终成功,并且重复重写请求,可能导致重写循环(即500错误)。

解决这个问题的方法是在!^public条件中添加斜杠前缀。修改后的代码如下:

RewriteCond %{REQUEST_URI} !^/public($|/)

RewriteRule ^(.*)$ public/$1 [L]

然而,你还应该在/public子目录中有另一个.htaccess文件,其中包含管理通过Laravel应用程序的路由的mod_rewrite指令,这将防止重写循环发生。

0