Laravel 7 移除URL中/public路径的问题求助
解决Laravel 7共享主机部署中URL带/public的问题
我完全懂你现在的烦恼——试了常见的部署步骤,但访问路由还是得加/public,确实很影响体验。咱们来梳理下问题根源,然后一步步解决:
问题核心分析
你当前遇到的情况,大概率是共享主机的网站根目录没有指向Laravel的public文件夹。Laravel的设计里,public才是对外暴露的安全入口,所有请求都应该先经过这里。如果主机默认把根目录指向了Laravel项目的根目录(而不是public),那自然得加/public才能访问到正确的入口文件。
解决方案(按推荐程度排序)
方案1:修改共享主机的网站根目录(最推荐)
这是最规范的做法,也更安全。步骤如下:
- 登录你的共享主机控制面板(比如cPanel、Plesk)
- 找到对应域名的“网站根目录”或“文档根目录”设置
- 将原来的根目录(通常是
public_html或www)修改为public_html/public(假设你把Laravel整个项目放到了public_html文件夹里) - 保存设置后,清空浏览器缓存,访问
domain.com/test应该就能正常显示了
方案2:调整文件结构(如果主机不允许修改根目录)
如果你的主机限制了根目录修改权限,可以这么操作:
- 移动文件:
- 把Laravel项目
public文件夹里的所有内容(包括index.php、.htaccess)复制/移动到主机的网站根目录(比如public_html) - 把Laravel项目的其他核心文件(
app、config、routes、vendor等)移动到网站根目录的上级目录,比如命名为laravel_core
- 把Laravel项目
- 修改入口文件路径:
打开根目录里的index.php,把里面的路径指向新的核心文件位置:// 原来的代码 require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; // 修改后(根据你移动的目录调整路径) require __DIR__.'/../laravel_core/vendor/autoload.php'; $app = require_once __DIR__.'/../laravel_core/bootstrap/app.php'; - 更新.htaccess:
确保根目录的.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>
验证测试
完成上述任意方案后,清空浏览器缓存,访问domain.com/test,应该能正常返回HI了。如果还是有问题,可以检查:
- 主机是否开启了
mod_rewrite模块(大部分共享主机默认开启,如果没开,联系主机商开启) - 文件权限是否正确(
storage和bootstrap/cache目录需要可写权限)
内容的提问来源于stack exchange,提问作者Lamar
相关产品推荐
相关产品推荐

