如何从分页URL中删除页面

时间:2016-06-01 19:22:14

标签: php pagination

我写了一个SEO友好的分页功能,工作正常。但是,我目前的网址如下所示:

1。 localhost/test/tastepage.php/test/testpage/page/123

但我想要完成的是:

2。 localhost/test/testpage.php/page/123localhost/test/testpage.php/123

当我进入网址栏并编辑我的网址时, 2 它工作正常。但我想知道,每当我第一次加载页面时,为什么我的网址看起来像 1

以下是我在tastpage.php文件中的内容:

$page=1;//set page number to 1 as default
$sitepath=explode('/',parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH));//removing slashes from the url and slicing up the url into an array
if(is_array($sitepath)&& !empty($sitepath)){
    if($keys=array_search('page',$sitepath)){;
    print_r($keys);
    $page=(int)$sitepath[$keys+1];
    }
}
function paginate($page,$display,$total){
$sitepath=parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
  if($sitepath!='/'){
      $sitepath=rtrim($sitepath,'/');
      if(stristr($sitepath,'page/')){
          $sitepath=rtrim($sitepath,'0..9');
          $query='';
      }
      else {
         $query=$sitepath .'/page/';
     }
  }
      else {
        $query = 'page/';
    }
$pages=ceil($total/$display );

$first='<a href="'.$sitepath.$query.'1">First</a>';
$last='<a href="'.$sitepath.$query.$pages.'">Last</a>';
$next='<li><a href="'.$sitepath. $query . ($page + 1) . '">»</a></li>';
$preview='<li><a href="'.$sitepath.$query.($page-1).'">«</a></li>';
$numbers="";
for ($i=max(1,$page-5);$i<=min($page+1,$pages);$i++)
{
    if($i==$page){
    $numbers.='<li><a class="active" href="'.$sitepath.$query.$i.'">'.$i.'</a></li>';
    }
    else {
        $numbers.='<li><a href="'.$sitepath.$query.$i.'">'.$i.'</a></span></li>';
    }
}
   if($page>1){
     echo $preview;
   }

 echo  $numbers; 

   if($page<$pages){
      echo  $next;
   }
    };

$limit = 10;
//count how many rows 
$total = $conn->query("SELECT COUNT(*) FROM pagi")->fetchColumn();

if ($total > 0) {
    $start = $limit * $page - $limit;
    $sql = $conn->prepare("SELECT * FROM pagi ORDER BY pg_id LIMIT :start, :limit");
    $sql->bindValue(':start', $start, PDO::PARAM_INT);
    $sql->bindValue(':limit', $limit, PDO::PARAM_INT);
    $sql->execute();
    if ($sql->rowCount() > 0) {
        while ($result = $sql->fetch(PDO::FETCH_ASSOC)) {
            echo $result['pg_name'],"<br />";
        }
    }
} else {
    echo "no result to fetch";
}
 ?>

1 个答案:

答案 0 :(得分:3)

我的答案是您的网址问题的替代解决方案。 请在您网站的根目录中输入'.htaccess'文件。将此代码放在.htaccess:

RewriteEngine on 
RewriteRule ^/?testpage/(.*) testpage.php?page=$1 [L]

然后你可以通过testpage.php上的这个php代码获取当前页码:

<?php
$page = (isset($_GET['page']) ? (int)$_GET['page'] : 1);//holds the current page
echo $page;
?>

在浏览器中尝试使用这些网址来测试此解决方案是否有效:

要获得解释,请尝试阅读本文:https://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/