.htaccess 虚拟目录作为 $_GET 参数

问题描述 投票:0回答:1

在使用多个数据库时,我有一个数据库 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
regex .htaccess mod-rewrite url-rewriting
1个回答
0
投票

总结评论中的讨论:您应该使重写规则尽可能简单。维护一个包含许多可能冲突的规则的长 .htaccess 文件是一件非常令人头疼的事情。 CloudFlare 甚至 Stack Overflow 等其他服务所做的大多不是基于重写规则;他们使用路由处理后端编写的 URL,和/或尽可能使用应用于所有 URL 的一种模式。


话虽如此,是的,您可以通过链接多个规则来在多个步骤中重复修改您的请求,例如:

RewriteRule ([^/.]+)/(.*) $2?database_id=$1
RewriteRule hrm/employees/? app/hrm/employees.php

/Sa3fcXsaL/hrm/employees
的请求为例,该请求分两步重写:

  1. /Sa3fcXsaL/hrm/employees
    /hrm/employees?database_id=Sa3fcXsaL
  2. /hrm/employees?database_id=Sa3fcXsaL
    /app/hrm/employees.php?database_id=Sa3fcXsaL
© www.soinside.com 2019 - 2024. All rights reserved.