基于子目录的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
相关产品推荐
相关产品推荐

