【问题标题】:PHP/HTACCESS Creating link without extensionsPHP/HTACCESS 创建不带扩展名的链接
【发布时间】:2020-07-10 00:35:06
【问题描述】:

我想为我的服务制作用户友好的 API。我试图让它像 Discord API - https://example.com/api/accounts/<account ID>/<stuff>/,下面是一些预期的链接示例:

https://example.com/api/accounts/1234567890/data/

https://example.com/api/accounts/1234567890/inventory/

https://example.com/api/accounts/1234567890/servers/

我尝试了一些 htaccess 技巧,但没有任何结果 - 网站已损坏(只是白页没有任何内容)或帐户 ID 被视为文件夹(HTTP 404,因为我不希望这些 ID 作为文件夹)。

提前感谢您的回复

编辑 1:

文件结构可以是任意的,我只是希望它能正常工作。但我最期待的是

api
- accounts
  - data
  - inventory
  - ...
- server (example)
- game (example)

编辑 2:

我的 API 是 OOP - 所以我可以从任何地方调用它。我只需要获取数据并创建新对象并调用一些函数。在我看起来很糟糕的 API 中,链接类似于:https://example.com/api/accounts/data.php?id=123456789,而在该脚本中,我调用$stuff = new StuffObj($id, $other, $stuff, $from, $post); 并且功能类似于$stuff->execute();。但是有了新的 API,我可以只制作 GET var,比如 action,然后在 switch 中选择要使用的对象。

【问题讨论】:

  • 实际处理请求的文件系统路径是什么? (你只发布了半个问题。)
  • 使用路由器/前端控制器模式并传递所有内容RewriteRule .* index.php [L,QSA]
  • 在寻求帮助时,重要的是向我们展示您的尝试并解释更多内容,而不仅仅是“没有任何结果”。
  • 已编辑,希望对您有所帮助
  • "文件结构可以是任意的,我只想让它工作。" - ?!听上去,您目前没有 API?在实现“漂亮”的 URL 结构之前,您需要有一个有效的 API 和有效的端点(即实际处理请求的脚本......接受 <account ID><stuff> 并执行有什么东西)-您的问题中仍然缺少此信息。上面的建议是让index.php 处理所有事情——这是你想做的吗?

标签: php .htaccess


【解决方案1】:

在我看起来很糟糕的 API 中,链接是这样的:https://example.com/api/accounts/data.php?id=123456789

在这种情况下,要实现 /api/accounts/<id>/data/ 形式的“漂亮” URL,您可以在 /api/.htaccess 文件中使用 mod_rewrite 执行以下操作:

Options -MultiViews

RewriteEngine On

RewriteRule ^accounts/(\d+)/data/$ accounts/data.php?id=$1 [L]

为了使其更“通用”,将/api/accounts/<id>/<action>/ 形式的 URL 重写为 /api/accounts/<action>.php?id=<id>,假设 <action> 仅包含小写字母,那么您可以将上面的 RewriteRule 更改为:

RewriteRule ^accounts/(\d+)/([a-z]+)/$ accounts/$2.php?id=$1 [L]

虽然在您的文件结构中,您似乎有/accounts 目录的“子目录”(?)也与.php 文件的基本名称匹配?如果是这样,这可能会有问题,因此我在上面禁用了 MutliViews。

但是有了新的 API,我可以只做 GET var,就像动作一样

是的,您可以 - 并且可能更可取 - 一切都由单个入口点管理(例如,index.php - 但您可以随意称呼它) - 但是,您需要具体并决定这一点在实施“漂亮的 URL”之前 - 这实际上只是装饰性的绒毛。其实如果这只是一个API,那还需要实现一个“漂亮的URL”吗?

【讨论】:

  • 感谢您的回答。这不是我想要的,但这向我展示了如何为我的子目录扩展它。
  • 不客气。 “这不是我想要的”——嗯,就是这样——你实际上并没有说明你想要什么。
猜你喜欢
  • 2014-01-12
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2013-03-06
相关资源
最近更新 更多