.HTACCESS 添加到 slugs

.HTACCESS adding to slugs

因此,我目前正在 PHP 中构建 REST API。

我设法让 slug 正常工作。 如果我请求 /api/admin/v1/users/1,它将 return 我需要的用户。 但是,我还需要能够添加到它,例如/api/admin/v1/users/1/keys.

管理 slug 的 HTACCESS 文件在文件夹本身中 (/users/)。

RewriteEngine On
RewriteRule ^(.*)$ user.php?slug= [L]

我尝试添加另一行,但我想我搞砸了(我对 HTACCESS 不是那么先进)

RewriteRule ^(.*)/keys$ keys.php?slug= [L]

这没有做任何事情,它仍然是 return 用户对象。

第二条规则不起作用,因为 L 标志保留为:最后 - 停止处理规则

因此您需要编辑为:

RewriteEngine On
RewriteRule ^(.*)$ user.php?slug= [QSA, L]
RewriteRule ^(.*)/keys$ keys.php?slug= [QSA, L]
RewriteRule ^(.*)$ user.php?slug= [L]
RewriteRule ^(.*)/keys$ keys.php?slug= [L]

第一条规则匹配所有内容,因此第二条规则永远不会被处理。但是由于第一条规则匹配 everything 它也会在重写引擎的第二次传递中重写自己(到 user.php?slug=user.php)。

您可以通过使正则表达式更具限制性来解决这些问题。从您的示例 URL 看来 slugnumeric - 在这种情况下,您可以限制正则表达式仅匹配数字 (0-9)。

例如:

RewriteRule ^(\d*)$ user.php?slug= [L]
RewriteRule ^(\d+)/keys$ keys.php?slug= [L]

请注意,第一条规则也匹配空 URL-path,即。根本没有鼻涕虫(就像你原来的规则一样)。第二条规则不允许空 slug(它永远不会匹配)。