自定义根文件夹的 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 8 Jetstream如何在重置密码后将用户重定向到自定义路由