403禁止访问:在共享主机上使用Laravel

5

我有一个共享主机,想让我的 Laravel 项目在上面运行。我正在使用 Voyager 来管理后台。

我把我的应用程序公共文件夹放在 /public_html 中,将其余的项目放在与 /public_html 相同级别的位置。所以它看起来像这样:

.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.cpanel
.htpasswds
logs
mail
app -> my project
public_ftp
public_html -> where my app public folder is
.ssh
tmp
etc
...

我已经成功处理了几乎所有的事情,但是管理员面板没有正常工作。
当我访问www.example.com/admin时,它会跳转到www.example.com/admin/login,我输入我的凭据并提交表单,然后返回到同一页。之后我在Chrome的网络选项卡中检查,出现以下信息:
Request URL: http://example.com/admin/login
Request Method: GET
Status Code: 403 Forbidden

有人知道如何修复它吗?
谢谢。

所有权限都正确吗? - Sakezzz
我将存储和供应商文件夹设置为775,这样正确吗? - jackcar
这不是应该的操作。你的整个Laravel项目都应该放置在public_html文件夹中,包括public 文件夹。然后,你可以编写一些.htaccess规则来指向你域名根目录下的public文件夹。 - user3574492
5个回答

8

如果您遇到这样的问题,则在根目录中添加 .htaccess 文件,并将以下代码放入其中,它将开始工作。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

在Namecheap与我一起工作过。 - Wassim Al Ahmad
1
什么是Namecheap? - Nikul Panchal
我的主机计划在https://www.namecheap.com/上。 - Wassim Al Ahmad
适合我使用的是Wave SaaS入门套件。 - Abhishek Dheeman

0
选项 -MultiViews -Indexes。
RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

0

0
通常情况下,你应该将公共文件夹中的文件复制到public_html文件夹中,并将其他文件夹放在public_html之外,因为它对整个世界都是可见的。
你应该修改public/index.php文件,具体细节如下:
//line 24
require __DIR__.'/../app/vendor/autoload.php';

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

由于您在public_html文件夹中有一个public文件夹,因此您应该再添加一个(..)

//line 24
require __DIR__.'/../../app/vendor/autoload.php';

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

域名或子域名

将您的域名或子域名指向{{your_domain}}/public

eg: In your case, if you visit www.abc.com it should point to /public_html/public.
for other cases, it should point to /public_html

注意:

不要忘记更新您的.env文件

  1. 设置APP_ENV=production
  2. APP_DEBUG=false
  3. LOG_CHANNEL=daily // 被认为是良好的实践
  4. 您的数据库凭据
  5. 以及其他必要的更改...

权限

通常情况下,您不需要更改文件和文件夹的权限。如果需要,则将文件夹设置为755,文件设置为644

永远不要将权限设置为777


-2

你好,你的存储文件夹必须设置权限为777 chmod -R 777 或者 sudo chown -R www-data:www-data /var/www(推荐)


-R 777 是可以的,但 www-data 用户也行。 - Levon Babayan
永远不要将权限设置为777。 - Jefferson Costa
为什么?如果是本地机器的话。 - Levon Babayan
而且,就您所知,我推荐解决此问题的方法是sudo chown -R www-data:www-data /var/www(推荐),正如我在回复中提到的那样。 - Levon Babayan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接