我試圖創建一個非常簡單的URL路由和我的思維過程是這樣的:自定義URL路由使用PHP和正則表達式
- 首先檢查所有靜態URL
- 然後檢查數據庫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
}
我的問題是,如果我有「/註冊」 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個靜態網址,因此特別排除所有這些網址會非常笨拙。
**附註:**就沒有必要逃避連字符'-'在字符類的末尾(或開頭)。另外爲了防止一些混淆,你可以使用其他分隔符而不是正向符號'/',這樣你就不需要在你的表達式中將它們轉義出來了〜〜/ @' – HamZa
@HamZA,很感謝。不知道。 – zen