如何配置Rewrite Rule为所有页面传数据库变量,避免子路径404?
解决多数据库子路径URL重写404问题
你只需要调整Rewrite规则,让它匹配所有子路径请求,不用单独为每个文件夹/文件配置规则。具体配置如下:
RewriteEngine On # 处理带子路径的请求(如/projects/database1/somefolder/somefile.php) RewriteRule ^projects/([a-z]+)/(.*)$ /projects/$2?db=$1 [QSA,NC,L] # 处理首页请求(如/projects/database1/) RewriteRule ^projects/([a-z]+)/?$ /projects/index.php?db=$1 [NC,L]
规则说明:
^projects/([a-z]+)/(.*)$:匹配所有以projects/数据库标识/开头的请求,第一个括号捕获数据库名(比如database1),第二个括号捕获后续的完整子路径(比如somefolder/somefile.php)/projects/$2?db=$1:将请求转发到实际存在的子路径$2,同时把捕获到的数据库名作为db参数传递QSA:自动保留原URL中的查询参数(比如?id=1&aa=bb),不会丢失NC:忽略URL大小写L:执行完这条规则后停止后续规则处理
注意事项:
- 合并后只需把原folder1-4中任意一个的完整目录结构放到
projects根目录下即可,因为四个文件夹结构一致 - 静态资源(CSS、JS、图片等)的请求也会被正确转发,无需额外配置
内容的提问来源于stack exchange,提问作者Egon79
相关产品推荐
相关产品推荐

