gpt4 book ai didi

php - 使用 PHP 和正则表达式自定义 URL 路由

转载 作者:行者123 更新时间:2023-12-02 01:25:37 25 4
gpt4 key购买 nike

我正在尝试创建一个非常简单的 URL 路由,我的思考过程是这样的:

  • 首先检查所有静态网址
  • 然后检查数据库网址
  • 如果都不存在则返回 404

静态 URL 当然很容易实现,但我正在尝试找出实现动态 URL 的最佳方法。我宁愿不必设置静态前缀,尽管知道这会使编码变得更加容易。

这是我目前拥有的:

$requestURL = $_SERVER['REQUEST_URI'];

if ($requestURL == '/') {
// do stuff for the homepage
}

elseif ($requestURL == '/register') {
// do stuff for registration
}

// should match just "/some-unique-url-here"
elseif (preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) {
// query database for that url variable
}

// should match "/some-unique-url/and-another-unique-url"
elseif (preg_match("(^\/[A-Za-z0-9\-]+\/[A-Za-z0-9\-]+)/",$requestURL)) {
// query database for first and second variable
}

else {
// 404 stuff
}

我的问题是,如果我有“/register”URI,它将匹配第二个 elseif 语句以及正则表达式语句。但我想避免必须从正则表达式语句中专门排除每个静态 URL,例如:

// should match just "/some-unique-url-here"
elseif ((preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) &&
($requestURL !== '/register') &&
($requestURL !== '/')) {
// query database for that url variable
}

解决这个问题最简单的方法是什么?我可能会有 15-20 个静态 URL,因此专门排除所有这些 URL 会非常笨拙。

最佳答案

您的问题不存在。如果第一个 elseif ($requestURL == '/register') 匹配,则不会评估同一级别上的所有后续 elseif

您已经做对了,只需确保首先进行字符串比较 (==)。

另一方面,不要重新发明轮子。

关于php - 使用 PHP 和正则表达式自定义 URL 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com