在尝试使用url重写时,在第一个url旁边添加下一个url

时间:2016-06-18 19:22:05

标签: php .htaccess url mod-rewrite

我有这个简单的.htaccess文件,我正在尝试从网址中删除查询字符串。

当前网址: - search.php / page?page = 1& s = 14。

我想完成网址: - page / 1/14。

所以我的htaccess文件看起来像这样。

RewriteEngine On
RewriteRule ^page/([0-9]+)/([A-Za-z0-9]+)$ search.php?page=$1&s=$2

我的href看起来像这样

if($i==$page){
    $numbers.='<li><a class="active" href="page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>';
    }
    else {
        $numbers.='<li><a href="page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>';
    }

工作正常但是当我试图从第1页转到第2页时,我的网址看起来像这样: - page / 1/14 / page / 2/14。为什么会这样?

2 个答案:

答案 0 :(得分:2)

正如MartinMouritzen所提到的,如果您的href标记不以/开头,那么它将使用当前路径作为基础。在您的情况下,当前路径为page/1/14,因此浏览器决定使用的新路径为page/1/14/page/2/14。为每个href属性添加一个前导斜杠应解决此问题。

另外你应该调整一下你的rewriteRule,所以它允许使用尾部斜杠:

RewriteEngine On
RewriteRule ^page/([0-9]+)/([A-Za-z0-9]+)/?$ search.php?page=$1&s=$2

您还应该小心将变量直接写入HTML,sterm似乎可能是用户给出的?如果是这样的话,那肯定是一个XSS漏洞。您应该在将所有变量写入页面时对其进行清理,如下所示:

$s_url = '/page/' . htmlspecialchars($i) . '/' . htmlspecialchars($sterm);
if($i == $page) {
    $numbers .= '<li><a class="active" href="' . $s_url . '">' . htmlspecialchars($i) . '</a></span></li>';
} else {
    $numbers .= '<li><a href="' . $s_url . '">' . htmlspecialchars($i) . '</a></span></li>';
}

最后,看起来你有一个收盘价,但是没有开盘价?即使它在技术上有效的HTML交织标签(又名<b><i>something</b></i>),它也不是好形式。您绝对应该在span元素中打开li,或者将结束span移到li元素之外(因此lispan标记不是&# 39; t交织在一起,只嵌套)。

答案 1 :(得分:1)

问题与您的重写没有任何关系。

将代码编辑为

if($i==$page){
    $numbers.='<li><a class="active" href="/page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>';
}
else {
    $numbers.='<li><a href="/page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>';
}

它会给出预期的结果。