【问题标题】:Laravel application deployed in sub directory all routes brokenLaravel 应用程序部署在子目录中所有路由都已损坏
【发布时间】:2020-03-10 08:52:50
【问题描述】:

我看到有人询问路由到位于子目录中的控制器。但我的问题是我的 Laravel 应用程序本身位于子目录中。默认路由有效,即 IE "/",但其他所有路由都无效。

这是我目前所拥有的:

  1. Laravel 应用程序位于 public_html/dashboard

  2. 我已将位于 dashboard/public 中的 .htaccess 文件放入 dashboard/(Laravel 根目录)

  3. 我已将 server.php 文件更改为 index.php,以便可以从仪表板/而不是仪表板/公共访问该站点

  4. 我在RouteServiceProvider的mapWebRoutes方法中添加了->prefix('dashboard'):

protected function mapWebRoutes()
{

    Route::middleware('web')
            ->prefix('dashboard') // <-- Added this
            ->namespace($this->namespace)
            ->group(base_path('routes/web.php'));
}
  1. 在 helpers.php 中为 assets 函数添加前缀路径:
function asset($path, $secure = null)
{
    return app('url')->asset("dashboard/public/".$path, $secure);
}

我当前的路由设置

到目前为止,我的 web.php 有一些简单的路由,有些人可能认为我应该将 Route::prefix('dashboard') 包裹在我的路由周围,但这就是为什么我将前缀添加到 RouteServiceProvider 所以我的 web.php 中。 php 文件将始终具有该前缀。

Auth::routes();
Route::get('', 'EnquiryController@index')->name('home');
Route::post('switch', 'EnquiryController@switch')->name('switch');
Route::get('view-enquiry/{id}', 'EnquiryController@viewEnquiry')->name('view-enquiry');

几点说明:

我知道 Laravel 应用程序应该是完全公开的,并且 .env 文件不应该是可访问的。但现在我想让应用程序正常工作,之后我会处理隐藏它。

最后,进入dashboard/确实显示了一个完美的页面,但任何像dashboard/view-enquiry/52这样的路由或像dashboard/logout这样的Auth路由都只会返回一个404页面。

任何帮助将不胜感激,也许我这样做完全错误?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    如果您的项目在您的本地主机中运行良好,您需要做的就是!

    1. 将所有项目文件移动到 public_html 目录中的 dashboard 中。
    2. 将项目 public 文件夹的所有内容移动到根目录 public_html
    3. 将 index.php 文件复制到 public_html 根目录打开它并进行以下更改。

    第一个

    更改此行

    需要DIR.'/../vendor/autoload.php';

    收件人

    需要DIR.'/dashboard/vendor/autoload.php';

    其次

    更改此行

    $app = require_once DIR.'/../bootstrap/app.php';

    收件人

    $app = require_once DIR.'/dashboard/bootstrap/app.php';

    不需要更改你的 route.php 中的任何内容

    【讨论】:

    • 您好,感谢您的回答,您的点数为“2”。你说将 public/* 的内容移动到 public_html/* 但是 public_html 目录中有很多“垃圾”,所以我真的不想将 laravel 应用程序的公共内容与当前的 public_html 根内容混合。到目前为止,您说的所有其他内容都很有道理,谢谢:)
    • 好的!您也可以对该仪表板目录执行相同的过程,使其成为您的项目目录。将 public 的所有内容粘贴到仪表板中,并将其余内容移动到仪表板目录中的新文件夹中,并在 ** index.php** 中进行相同的更改,以便您可以使用domainName.com/dashboard 访问您的项目。现在将其余内容移动到仪表板目录中的新文件夹的原因是您的环境文件(.env)不会受到攻击。
    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多