自定义根文件夹的 Laravel 重定向问题

Posted

技术标签:

【中文标题】自定义根文件夹的 Laravel 重定向问题【英文标题】:Laravel redirect issue for custom root folder 【发布时间】:2020-01-16 20:27:40 【问题描述】:

我的 ISP 不允许我的 cpanel 托管 laravel 站点拥有自定义根文件夹(Laravel 结构中的公用文件夹)。

这意味着我无法让服务器将 /public_html/public 视为根。它必须始终是 /public_html

按照他们的指导,我设置了以下 /public_html/.htaccess 规则以使 Laravel 公用文件夹显示为根文件夹

RewriteEngine on
RewriteCond %HTTP_HOST ^domain-name.com$ [NC,OR]
RewriteCond %HTTP_HOST ^www.domain-name.com$
RewriteCond %REQUEST_URI !public/
RewriteRule (.*) /public/$1 [L]

这或多或少有效,但不完全有效。问题是,如果我在我的网站上请求一个带有结尾反斜杠的页面,则页面 url 以

结尾

www.domain-name.com/public/contact-us

而不是我所期望的

www.domain-name.com/contact-us

我认为这一定是 .htaccess 的问题,但我尝试了各种排列但无法解决。不过我可能错了,也许它最终需要在 URL 检查后通过 Laravel 重定向来修复。

这让我发疯了,我真的很感激任何想法!

【问题讨论】:

【参考方案1】:

出于安全目的,将整个应用程序放在 public_html 文件夹中是一个很大的危险信号。您必须非常小心您在此文件夹中的权限。默认情况下,.env、.git、缓存文件、私人上传等内容通常是可下载的,是的,黑客会扫描零食。

如果您可以将整个应用程序上传到您的cpanel主机的根目录并将public重命名为public_html(或者如果您无法删除它,则将public的内容复制到现有的public_html中)

那么您可能需要修改您的 laravel 应用 index.php 以将其用作公共路径。

index.php下:

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

添加:

// set the public path to this directory
$app->bind('path.public', function() 
    return __DIR__;
);

有了这个标准 .htaccess 应该可以正常工作而无需更改。

希望对您有所帮助。

【讨论】:

以上是关于自定义根文件夹的 Laravel 重定向问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Fortify 自定义身份验证重定向

Laravel 自定义表单请求重定向到索引页面

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

Laravel 5.4 登录后重定向到自定义 url

访问 url.com/public 时 Laravel .htaccess 重定向到主页

使用自定义中间件会将我重定向到 /home,即使 Laravel 中的中间件是空的