Laravel 从本地主机上的 url 中删除 public

Laravel remove public from url on localhost

生产时我有域 http://xxxx.com。 在根文件夹中,我添加了 .htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ /public/ [L,QSA]
</IfModule>

当我在浏览器中输入时:http://xxxx.com 有效。

与我机器上的 .htaccess 文件相同。我使用 XAMPP。它不起作用。当我输入:

http://localhost:8082/myfolder 

我收到 404。当我输入时:

http://localhost:8082/myfolder/public

有效。 我的主机和本地机器上的 url 有什么区别?


对于第一个答案: 这是一个屏幕,也许我做错了什么(.htaccess在根文件夹中),也许public文件夹中的.htaccess是错误的:

这应该适合你:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteRule !^public/ public%{REQUEST_URI} [L,NC]
</IfModule>

您的规则存在问题,您正在检查以下条件:

RewriteCond %{REQUEST_URI} !^/public/

它实际上从 Web 根目录检查 URI /public,但是您的网站位于本地的子文件夹中。这里 RewriteRule !^public/ 将检查 public/ 是否在当前目录上下文之后的开始处不存在,这在站点根目录和子目录中的工作方式相同。

同样,对于重写,请确保不要在 public/ 之前使用 / 以允许它使用相对路径。