首页 文章

Laravel从ROOT outsite调用/ public文件夹 . 获取NotFoundHttpException

提问于
浏览
2

我通过网络搜索解决了我的问题,但是没有解决方案适用于我,所以经过几个小时的路由模块挣扎后,我决定请你帮忙 .

Problem

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

Background

我已经在:** c:\ xampp \ htdocs \ projects \ laravel **下手动安装了Laravel框架,并使用composer为我完成剩下的工作 .

路由已设置为: Route::get('/', '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>

在我的Application根目录 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>

When I type: localhost\projects\laravel\ I've got NotFoundHttpException

当我输入:localhost \ projects \ laravel \ public我有欢迎页面

任何帮助都会很感激,谢谢 .

3 回答

  • 2

    最后,我有这个东西在工作 . 有两种解决方案可以做 .

    • 需要将所有公共内容提升级别

    • 秒需要您的共享主机目录根结构略有变化 - if allowed

    解决方案#1

    @Wasim在这个帖子中发布了第一个我不想实现的内容:Laravel 4 removing public from 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结构可以上传到您的共享虚拟主机,应用程序应该在我们的/ http地址中运行 .


    解决方案2(无法访问共享主机上的http.conf文件)

    此解决方案不要求您将/ public文件夹的内容移动一级,但要求您对共享主机中的 ../ROOT 目录具有读写访问权限(../ROOT目录主要包含 public_htmlpublic_ftp 等文件夹) .

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

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

    文件格式 /public 文件夹转到 public_html

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

    然后,对于带有'public'键的行,需要修改/bootstrap/paths.php:

    'public' => DIR . '/../public'至'public' => DIR . '/ .. / public_html '

    如果有人有类似的问题,这个解决方案不起作用请告诉我,谢谢 .

  • 0

    如果你想在uri上没有公开,可以使用laravel root中的composer . 使用命令php artisan serve并从浏览器浏览localhost:8000 . 它会带你到主页 .

  • 0

    你从哪里得到这条线?

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

    它不是Laravel的一部分 . 尝试删除它或Laravel根目录中的整个.htaccess文件 .

相关问题