.htaccess适配动态目录:将非存在文件重定向到带参数的index.php
统一根目录.htaccess实现多子目录动态路径URL重写
问题背景
之前各子目录(如app、folder1)单独使用.htaccess实现URL重写,规则逻辑一致但需硬写RewriteBase路径。现在应用需部署到动态层级目录(如/aaa/bbb/app/),原有规则无法适配,需要用根目录单个.htaccess统一实现所有子目录的重写逻辑。
根目录.htaccess完整规则
RewriteEngine On # 将旧的带index.php?view=的URL重定向为友好URL(301永久重定向) RewriteCond %{THE_REQUEST} \s/([\w/]+)/index\.php\?view=([^&\s]+) [NC] RewriteRule ^ /%1/%2? [R=301,L] # 将友好URL反向重写回对应子目录的index.php?view=参数 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([\w/]+)/([^/]+)$ $1/index.php?view=$2 [L]
规则说明
重定向旧URL:
RewriteCond匹配包含/xxx/index.php?view=xxx的请求,其中([\w/]+)捕获任意层级的子目录路径(如app、aaa/bbb/app),([^&\s]+)捕获view参数的值。RewriteRule将请求重定向为/子目录路径/参数值,并清除原有查询字符串(末尾的?)。
反向重写友好URL:
- 两个
RewriteCond确保请求的不是真实存在的文件或目录,避免影响静态资源访问。 RewriteRule匹配/子目录路径/参数值格式的请求,重写到对应子目录的index.php?view=参数值,[L]表示终止后续规则处理。
- 两个
注意事项
- 删除所有子目录(如
app、folder1)下的.htaccess文件,避免与根目录规则冲突。 - 确保服务器已开启
mod_rewrite模块。
内容的提问来源于stack exchange,提问作者Lion Hummer
相关产品推荐
相关产品推荐

