Как URL-перезапись будет работать с 3 параметрами? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть встроенный контроллер URL-маршрутизации в PHP.Все работает нормально, но теперь я нахожу ошибку, если у меня больше параметров, чем 2, она не работает, например:

Этот URL работает: "www.comelio.com/business-intelligence/anleser/"

, но этот URL не работает:"www.comelio.com/business-intelligence/data-mining/anleser/"

Мое правило перезаписи:

RewriteRule ^([\w-]+)/?([\w-]+)/?([\w-]+)/?([\w-]+)? index.php?lang=$1&rubrik=$2&unterrubrik=$3&seite=$4

Вот мой код маршрутизации if-else:

if($seite == null) {
  $filename = "{$rubrik}.html";
  $xdmvalue = $saxonProc->createAtomicValue($filename);
  $xsltProc->setParameter("articlePfad", $xdmvalue);

  if(in_array($filename, $filelist)) {
    $xmlFile = $dir . "/" . $filename;
    $xsltProc->setSourceFromFile($xmlFile);
  } else {
    echo "404";
  }
} else if(isset($seite) && isset($rubrik)){
  $filename = "{$rubrik}_{$seite}.html";
  $xdmvalue = $saxonProc->createAtomicValue($filename);
  $xsltProc->setParameter("articlePfad", $xdmvalue);

  if(in_array($filename, $filelist)) {
    $xmlFile = $dir . "/" . $filename;
    $xsltProc->setSourceFromFile($xmlFile);
  } else {
    echo "404";
  }
} else if(isset($seite) && isset($rubrik) && ($unterrubrik)){
  $filename = "{$rubrik}_{$unterrubrik}_{$seite}.html";
  $xdmvalue = $saxonProc->createAtomicValue($filename);
  $xsltProc->setParameter("articlePfad", $xdmvalue);

  if(in_array($filename, $filelist)) {
    $xmlFile = $dir . "/" . $filename;
    $xsltProc->setSourceFromFile($xmlFile);
  } else {
    echo "404";
  }
}

Прежде чем я напишу этот код, так что второй параметр работает только, теперь работает только третий параметр, например, теперь работает: "comelio.com/business-intelligence/data-mining/anleser"

И это не работает: "comelio.com/business-intelligence/anleser"

1 Ответ

1 голос
/ 03 июля 2019

Взгляните на htaccess Tester здесь (не забудьте добавить http в поле URL).

В вашем Условии перезаписи вы можете сделать косую черту необязательной. Таким образом, программа перезаписи всегда разделяет URL-адрес запроса на соответствие 4 частям. Попробуйте изменить правило на

RewriteRule ^([\w-]+)/?([\w-]+)?/?([\w-]+)?/?([\w-]+)? index.php?lang=$1&rubrik=$2&unterrubrik=$3&seite=$4

(обратите внимание на вопросительные знаки за ([\w-]+))

Это даст вам
http://www.comelio.com/index.php?lang=business-intelligence%26rubrik=data-mining%26unterrubrik=anleser%26seite=

и

http://www.comelio.com/index.php?lang=business-intelligence%26rubrik=anleser%26unterrubrik=%26seite=

...