当前位置: 首页 > 知识库问答 >
问题:

Laravel从ROOT外部调用 /public文件夹。获取NotFoundHttp异常

帅颖逸
2023-03-14

我已经通过网络搜索来解决我的问题,但没有一个解决方案对我有效,所以在与路由模块斗争了几个小时后,我决定向你们寻求帮助。

问题

我无法访问Laravel应用程序从外部 /public目录。我需要键入localhost\项目\laravel\公共在我的浏览器,但我想要的是使用URL与我们的 /public.主要原因是因为我使用共享主机,无法访问apache配置文件,所以我无法创建vhost。

出身背景

我已经手动安装了Laravel框架下:**c:\xampp\htdocs\project\laravel**和使用作曲家做我剩下的。

路由设置为:Route::获取('/', ' HomeController@showWelcome);

在我的项目根目录**c:\xampp\htdocs\projects\laravel**中,我放置了一个.htacces文件,其中包含以下内容:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /projects/laravel/
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>

    <IfModule !mod_rewrite.c>    
        ErrorDocument 404 /index.php
    </IfModule>

在我的应用程序根目录c:\xampp\htdocs\projects\laravel\public中,我拥有.htaccess,其中包含以下代码:

<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]
</IfModule>

当我键入:localhost\projects\laravel\n时,我得到了NotFoundHttpException

当我键入:localhost\projects\laravel\public时,我得到了欢迎页面

任何帮助都将不胜感激,谢谢。

共有3个答案

龚钧
2023-03-14

你从哪里得到这句台词的?

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

这不是拉威尔的一部分。尝试将其或整个.htaccess文件从Laravel根目录中删除。

洪弘毅
2023-03-14

如果您想在uri上不使用public,请使用laravel根目录中的composer。使用命令php artisan serve并从浏览器浏览localhost:8000。它会把你带到主页。

蔡理
2023-03-14

我终于把这东西修好了。有两种解决方案可以提出。

  1. 需要将所有公共内容级别提高

我不想实现的第一个对我有效的方法是@Wasim在这个线程中发布的:Laravel 4从URL中删除public解决方案不保存,因为内容核心结构与应用程序本身位于同一个目录中。这可能会在未来的实施中造成一些问题。

您需要将所有内容从公共/文件夹中移动一级到项目ROOT目录,然后替换index.php文件中的内部路径以获得正确的一次。出于安全考虑,这个. htaccess文件需要放在项目ROOT目录中

<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]
</IfModule> 

上面描述的修改过的Laravel结构可以上传到您的共享web主机上,应用程序应该在您的http地址中运行。

此解决方案不要求表单将/public文件夹的内容向上移动一级,但要求表单对共享主机中的../ROOT目录具有读写访问权限(../ROOT目录主要包含public\u html、public\u ftp和其他文件夹)。

您需要将Laravel scructure移动到../ROOT目录,如下所示:

app/
bootstrap/
vendors/
public_html/
public_ftp/
(...)

文件表单/公用文件夹转到公用\u html

public_html/index.php
public_hmtl/.htaccess
public_html/packages/
(...)

然后,需要修改/bootstrap/paths.php以获得具有“公钥”的行:

“公众”=

如果有人有类似的问题,这个解决方案不工作,请让我知道,谢谢。

 类似资料:
  • 有没有一种方法可以获得一个文件列表,而不需要对一个公共托管的Goolge驱动器文件夹使用授权? 示例文件夹:https://googledrive.com/host/0b1nmfb7vdm6jnnhjwk9cdu9uehc/ 我想使用该文件夹托管我将在其他站点的图库中显示的图像。

  • 问题内容: 我想使用“文件类”从项目文件夹中获取文件,我该怎么办? 问题答案: 嗯,有很多不同的方法来获取Java文件,但这是一般要点。 不要忘记,您至少需要将其包装在a 中,因为File是其中的一部分,这意味着它必须具有try-catch块。 不是要解决Ericson的问题,而是如果您使用的是实际的软件包,则除非明确使用文件的位置,否则文件的位置将有问题。相对路径与Packages混为一谈。 即

  • 我有一个像这样的文件夹 应用程序 供应商 引导程序 公开的 文件夹 img 当我从url访问时http://example.com/img/img.png它工作,但当我喜欢访问http://example.com/img/我得到禁止403,我需要的是重定向或显示该页面没有找到我的。htaccess看起来像这样。 选项-多视图选项-索引重写引擎打开

  • 我需要从file对象中的resources文件夹中获取这个文件,而不是在InputsReam中。我使用下面的代码,工作文件在eclipse上,但FoleNotFoundException在服务器上。)使用AWS EC2) 我添加了对用户服务POM的公共jar依赖。 请帮助我从一个公共项目的资源获取文件。

  • 我正在开发应用程序以从其他站点获取数据并显示在的html表中。 我使用Guzzes发送请求。(stackoverflow问题,最后使用Guzzes) 当我调用基于到外部API的请求时,它向我显示正确的数据! 我的问题是: 当我调用链接以获取laravel中的数据时,它会转到错误。 一些API地址只是在中工作, 我该怎么办?

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?