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

时间:2019-09-16 01:30:42

标签: php regex laravel .htaccess laravel-5

我的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 个答案:

答案 0 :(得分: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应该可以正常工作。

希望有帮助。