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

基于子目录的URL重写配置需求:多项目部署的.htaccess设置

没问题,我帮你调整.htaccess规则,让主项目和子目录项目的URL重写都能正常生效!

解决方案

1. 修改根目录的.htaccess

原来的规则会把所有请求都转发到主项目的web/目录,导致子目录项目的请求被错误拦截。我们需要先优先处理子目录的请求,再处理主项目的请求:

RewriteEngine On

# 优先处理子目录项目:匹配以subdirectory开头的路径,转发到对应项目的web目录
RewriteRule ^subdirectory/(.*)$ subdirectory/web/$1 [L]

# 处理主项目:其余所有请求转发到主项目的web目录
RewriteRule ^(.*)$ web/$1 [L]

解释:[L]标记表示处理完当前规则后停止后续匹配,这样子目录的请求就不会被主项目的规则覆盖,保证各自的路径独立。

2. 配置子目录项目的.htaccess

在subdirectory/web/目录下创建(或修改).htaccess,复用主项目的URL重写逻辑即可,比如:

RewriteEngine On

# 复制主项目web/.htaccess中的规则,比如将非文件/目录的请求转发到index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]

解释:这条规则和主项目的逻辑一致——如果请求的不是真实存在的文件或目录,就将路径参数传递给index.php,保证子目录项目的URL重写和主项目行为统一。

3. 验证效果

配置完成后可以测试以下场景:

  • 主项目:domain.com/homepage → 转发到domain.com/web/index.php?url=homepage
  • 子目录项目:domain.com/subdirectory/some-page → 转发到domain.com/subdirectory/web/index.php?url=some-page
  • 资源文件:domain.com/assets/css/style.css(主项目)、domain.com/subdirectory/assets/js/app.js(子目录项目)都会正确指向各自的assets目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:31