我的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重定向修复的问题。
这让我发疯了,我真的很感谢任何想法!
答案 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应该可以正常工作。
希望有帮助。