我已经在PHP中构建了一个URL路由FrontController。一切正常,但现在我发现了一个错误,如果我有比2更多的params,它就不能工作,例如:
此URL工作:"www.comelio.com/business-intelligence/anleser/"
但是这个网址不起作用:"www.comelio.com/business-intelligence/data-mining/anleser/"
我的重写规则:
RewriteRule ^([\w-]+)/?([\w-]+)/?([\w-]+)/?([\w-]+)? index.php?lang=$1&rubrik=$2&unterrubrik=$3&seite=$4
这里是我的路由,如果-否则代码:
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"
发布于 2019-07-03 07:51:55
在这里查看一下htaccess测试仪 (确保在URL字段中添加http )。
在重写条件下,您只能使斜杠是可选的。因此,重写程序将始终将请求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=
https://stackoverflow.com/questions/56864685
复制相似问题