我有一个网站,有4个文件夹。让我们说:
- 示例网站/项目/文件夹1/
example.com/projects/folder2/
example.com/projects/folder3/
example.com/projects/folder4/*
每个文件夹都包含子文件夹和文件等...它们基本上是彼此的克隆,但它们都从不同的数据库名称中提取数据。
我想做的是合并到一个单一的文件夹,所以当一些变化,我只需要编辑1个文件,而不是4。
- 示例网站/项目 *
然后使用url来指定它应该从哪个数据库获取数据:
- 示例网站/项目/数据库1/*
到目前为止,我已经能够使用以下重写规则在主页上实现这一点:
- 重写规则^项目/([a-z]+)/?$ /项目/索引.php?db=$1 [NC,L] #主页 *
但是如果我尝试它下面的任何链接,比如example.com/projects/database1/somefolder/somefile.php?id = 1&aa = bb,我会得到一个404错误。
是否可以完成我想做的事情,而不必为每个子文件夹/文件指定单独的重写规则?
1条答案
按热度按时间tyg4sfes1#
为什么你的规则不工作的文件深入路径是,你的模式不匹配任何东西,除了路径只包含字母:
重写规则^项目/([a-z]+)/?$ /项目/索引.php?db=$1 [NC,L] #主页
在这里
([a-z]+)
完全匹配:从“a”到“z”的所有字母,不区分大小写。您必须将其更改为捕获该文件夹名称的内容,直到终止斜杠或请求路径的末尾:然而,有一种更简单的方法,甚至不需要这样的“变量”。你不必在这个层次上提取信息。这就是经典的路由器方法:
你的索引脚本可以通过“superglobal”变量
$_SERVER['REQUEST_URI']
来访问请求的路径,在php内部处理这样的任务要舒服得多,所以不是在协议层,而是在你的应用程序逻辑内部,在那里你可以简单地做一些类似的事情:$db
将包含所需的文件夹名,即使没有您在协议层指定的变量。这显然允许在需要时使用更复杂的逻辑。