Laravel站点部署至主机后无法通过域名直接访问的求助
解决Laravel部署后需通过/public访问的问题
针对你的主机目录结构(域名mywebsite.com对应根目录/,项目放在/httpd.www下),可以通过以下几种方案解决:
方案1:修改站点根目录指向(优先推荐)
如果你的主机控制面板支持修改域名的文档根目录,直接将mywebsite.com的根目录从/改为/httpd.www/public。这是最直接的方法,符合Laravel的部署规范,无需修改项目文件。
方案2:调整项目文件结构与配置(无法修改根目录时使用)
- 移动入口文件:将
/httpd.www/public目录下的所有文件(包括.htaccess、index.php)移动到/httpd.www目录下(覆盖原有文件,若有)。 - 修改index.php路径:打开
/httpd.www/index.php,更新vendor和app的引入路径:// 原代码 require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; // 修改后 require __DIR__.'/vendor/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; - 配置站点URL:编辑
/httpd.www/config/app.php,设置'url'参数为你的域名:'url' => env('APP_URL', 'https://mywebsite.com'), - 验证.htaccess配置:确保
/httpd.www/.htaccess包含Laravel的重写规则:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> 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] </IfModule>
方案3:通过.htaccess转发请求(快速临时方案)
如果不想移动文件,在/httpd.www目录下创建.htaccess文件,添加以下规则将所有请求转发到public目录:
RewriteEngine On RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L]
额外注意事项
- 确保
/httpd.www/storage和/httpd.www/bootstrap/cache目录具备可写权限(通常设置为755或775)。 - 清除Laravel缓存:执行
php artisan cache:clear和php artisan config:clear(若主机支持SSH命令行)。
内容的提问来源于stack exchange,提问作者Coaxible
相关产品推荐
相关产品推荐

