我有一个共享主机,我正在努力让我的laravel项目在上面运行,我正在使用voyager访问管理面板。
我把我的应用程序公用文件夹放在/public_html中,项目的其余部分放在/ppublic_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
有人知道怎么修吗?
谢谢。
如果您遇到类似的问题,请在根文件夹中添加.htaccess
文件,并在其中放入以下代码,它将开始工作
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
通常,您应该将您的public文件夹中的文件复制到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文件夹中有一个公用文件夹,因此应该再添加一个(..)
//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文件
- 设置APP_ENV=生产
- APP_DEBUG=错误
- LOG_CHANNEL=每日//被视为良好做法
- 您的数据库凭据
- 以及其他必要的改变
权限
通常情况下,您不需要更改文件和文件夹权限。如果需要,则将文件夹设置为755,将文件设置为644
从不将权限设置为777
对我来说,这是因为.htaccess
正在寻找一个文件夹(这是被禁止的),而不是使用具有相同名称/admin
的Laravel路由。
请参阅此处的StackOverflow:Laravel,管理员控制器-403禁止
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]
Hi您的存储文件夹必须设置权限777chmod-R 777或sudo chown-R www数据:www数据/var/www(推荐)