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

Laravel项目.htaccess配置:如何将指定路径重定向到用户名二级域名

.htaccess 路径重定向到子域名实现方案

前置配置(必须完成否则规则不生效)

  • 开启Apache重写模块:编辑httpd.conf,取消LoadModule rewrite_module modules/mod_rewrite.so前的注释
  • 允许.htaccess生效:找到站点对应配置段,将AllowOverride None修改为AllowOverride All
  • 本地泛域名解析:修改hosts文件(Windows路径:C:\Windows\System32\drivers\etc\hosts,macOS/Linux路径:/etc/hosts),添加记录127.0.0.1 *.localhost,确保所有子域名都能指向本地服务

注意:测试重定向规则前请清空浏览器缓存,避免301永久重定向的缓存影响测试结果,测试阶段可先使用302临时重定向验证。

重定向规则配置

将以下规则写入localhost站点根目录的.htaccess文件即可实现需求:

RewriteEngine On

# 匹配原路径规则,重定向到对应用户子域名
RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteRule ^storage/([0-9]+)/public/([a-zA-Z0-9_-]+)/?$ http://$2.localhost [L,R=301,NC]

规则说明:

  • ([0-9]+)匹配路径中的*{id}*参数,默认仅匹配数字,可根据实际id规则调整正则
  • ([a-zA-Z0-9_-]+)匹配路径中的*{username}*参数,可根据实际用户名允许的字符调整正则
  • R=301代表永久重定向,测试阶段可替换为R=302避免浏览器缓存旧规则
  • NC代表匹配路径时不区分大小写

重定向后原路径获取方案

如果你需要在{username}.localhost站点中获取对应的原storage/{id}/public/{username}路径,有两种常用方案:

方案1:重定向时携带参数

修改重写规则,将id作为参数传递到子域名:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteRule ^storage/([0-9]+)/public/([a-zA-Z0-9_-]+)/?$ http://$2.localhost?storage_id=$1 [L,R=301,NC]

在子域名站点的业务代码中,直接读取storage_id参数即可拼接出完整的原存储路径。

方案2:内部动态映射(无感知,地址栏不变)

不需要显式重定向,直接通过Apache虚拟主机别名实现子域名到对应存储路径的内部映射,用户访问{username}.localhost时地址栏保持不变,服务端直接读取对应storage路径的资源:

  1. 编辑httpd.conf,取消LoadModule vhost_alias_module modules/mod_vhost_alias.so前的注释
  2. 添加虚拟主机配置:
<VirtualHost *:80>
    ServerName *.localhost
    # 替换后面的路径为你本地站点根目录的绝对路径
    VirtualDocumentRoot "D:/wwwroot/storage/%-2/public/%-3+"
    <Directory "D:/wwwroot">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

规则中的%-3+代表取子域名的第一部分(即username),可根据你实际的存储目录结构调整映射规则,该方案不需要额外传参即可直接访问对应路径的资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:03