在使用多个数据库时,我有一个数据库 ID 存储在
$_SESSION
中,我想在 url 中传递该 ID,如下所示:
现在:
my.domain.app/hrm/employees
新:
my.domain.app/Sa3fcXsaL/hrm/employees
- 其中 Sa3fcXsaL
是数据库 ID(随机字符串),应始终传递到页面内的 $_GET["database_id"]
。
如果我要为特定页面手动执行此操作,它会起作用。因此:
RewriteRule ^app/([^/\.]+)/hrm/employees/?$ app/hrm/employees.php?database_id=$1 [L]
有没有办法使用
RewriteCond
在整个应用程序中执行此操作?请注意,在许多情况下,我使用 htaccess 并重写规则,如下所示:
网址:
my.domain.app/hrm/employee/12/profile
.htaccess:
RewriteRule ^app/hrm/employee/([^/\.]+)/([^/\.]+)/?$ app/hrm/employee/index.php?viewid=$1&page=$2 [L]
换句话说,我想做 cloudflare 正在做的事情:
https://dash.cloudflare.com/7d417df8e2ac/
https://dash.cloudflare.com/7d417df8e2ac/websites
https://dash.cloudflare.com/7d417df8e2ac/domains/example.com/contacts
总结评论中的讨论:您应该使重写规则尽可能简单。维护一个包含许多可能冲突的规则的长 .htaccess 文件是一件非常令人头疼的事情。 CloudFlare 甚至 Stack Overflow 等其他服务所做的大多不是基于重写规则;他们使用路由处理后端编写的 URL,和/或尽可能使用应用于所有 URL 的一种模式。
话虽如此,是的,您可以通过链接多个规则来在多个步骤中重复修改您的请求,例如:
RewriteRule ([^/.]+)/(.*) $2?database_id=$1
RewriteRule hrm/employees/? app/hrm/employees.php
以
/Sa3fcXsaL/hrm/employees
的请求为例,该请求分两步重写:
/Sa3fcXsaL/hrm/employees
→ /hrm/employees?database_id=Sa3fcXsaL
/hrm/employees?database_id=Sa3fcXsaL
→ /app/hrm/employees.php?database_id=Sa3fcXsaL