Пользовательская маршрутизация URL с PHP и регулярным выражением

Я пытаюсь создать очень простую маршрутизацию URL-адресов, и мой мыслительный процесс был следующим:

  • Сначала проверьте все статические URL-адреса
  • Затем проверьте URL-адреса базы данных
  • Затем верните 404, если не существует

Статические 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 «/ register», он будет соответствовать второму оператору elseif, а также выражению regex. Но я хочу, чтобы не было необходимости специально исключать каждый статический URL из оператора regex, например:

 // 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-адресов, поэтому, в частности, исключение всех из них будет очень неуклюжим.

Solutions Collecting From Web of "Пользовательская маршрутизация URL с PHP и регулярным выражением"

Ваша проблема не существует. Если первый elseif ($requestURL == '/register') соответствует, все последующие elseif на одном уровне не будут оцениваться.

Вы уже делаете это правильно, просто убедитесь, что сначала выполняете сравнения строк ( == ).

С другой стороны, не изобретайте велосипед.