我有这个简单的.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。为什么会这样?
答案 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元素之外(因此li
和span
标记不是&# 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>';
}
它会给出预期的结果。