我正在尝试创建一个非常简单的URL路由,我的思维过程是这样的:
静态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语句以及正则表达式语句。但我想避免必须从regex语句中明确排除每个静态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会非常笨重。
答案 0 :(得分:8)
您的问题不存在。如果第一个elseif ($requestURL == '/register')
匹配,则不会评估同一级别上的所有后续elseif
。
你已经做得对了,只要确保你先进行字符串比较(==
)。
另一方面,请不要重新发明轮子。