You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess实现点击链接直接加载多版本Laravel项目?

多Laravel项目部署问题解决

问题场景

尝试用.htaccess搭建多版本Laravel项目站点,首页index.html代码:

<body>
    <ul>
      <li>
        <a href="Projects/Project1/">Project1</a>
      </li>
      <li>
        <a href="Projects/Project2/">Project2</a>
      </li>
      <li>
        <a href="Projects/Project3/">Project3</a>
      </li>
    </ul>
  </body>

每个项目的.env配置(以Project1为例):

APP_URL=http://127.0.0.1:8000/AllProjects/Projects/Project1/

每个项目根目录.htaccess代码:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ /public/index.php [L]
</IfModule>

点击链接后仅显示目录列表,无法加载Laravel站点。

问题原因

  1. .htaccess规则使用绝对路径/public/index.php,会指向服务器根目录的public文件,而非当前项目目录下的入口文件
  2. 未禁用目录索引,导致优先显示目录结构而非跳转入口文件

修复步骤

1. 修改项目根目录的.htaccess

替换每个项目根目录的.htaccess内容为:

<IfModule mod_rewrite.c>
    Options -MultiViews -Indexes
    RewriteEngine On

    # 将所有请求转发到当前项目的public目录
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>
  • -Indexes:禁止目录列表显示,避免暴露文件结构
  • 规则会把当前项目的所有请求重定向到自身的public目录,交由Laravel默认的public/.htaccess处理路由

2. 保留public目录的默认.htaccess

确保每个项目的public目录下存在Laravel默认的.htaccess文件,内容如下:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # 处理授权头
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 移除末尾斜杠(非目录请求)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # 所有请求转发到index.php
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

这个文件是Laravel处理路由的核心,不要删除或修改默认规则。

3. 配置Apache服务器

  • 启用mod_rewrite模块:执行a2enmod rewrite(Linux环境),然后重启Apache服务
  • 修改网站根目录的Apache配置,确保AllowOverride设置为All:
<Directory "/path/to/your/AllProjects">
    AllowOverride All
    Require all granted
</Directory>

只有AllowOverride All才能让.htaccess的规则生效。

4. 验证.env配置

确认每个项目的APP_URL正确,同时建议将APP_ENV设置为production:

APP_URL=http://127.0.0.1:8000/AllProjects/Projects/Project1/
APP_ENV=production

修改后执行php artisan config:clear清除配置缓存(如果是CLI环境)。

内容的提问来源于stack exchange,提问作者Ana Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:25:35