2016-06-01 5 views
1

私はうまく動作しているSEOにやさしいページネーション機能を書いています。しかし、私の現在のURLは次のようになります。ページのURLからページを削除するには

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

しかし、私は何を達成したいことは次のとおりです。

2.localhost/test/testpage.php/page/123またはlocalhost/test/testpage.php/123

私がに行くときURLバーのように私のURLを編集それは正常に動作しています。しかし私は知りたいのですが、最初にページを読み込むたびにURLがのように見えるのはなぜですか?ここで

は私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"; 
} 
?> 
+0

は、なぜあなたはhtaccessを介して、このロジックを行ういけませんか? –

+0

htaccessについては私はnoobです。私はhtaccessのために私のApacheを設定しましたが、実際にhtaccessを使ってこれを行う方法がわかりません –

答えて

3

私の答えはあなたのURLの問題のための代替ソリューションです。 ウェブサイトのルートに「.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; 
?> 

がこのかどうかをテストするには、ブラウザで次のURLを試してみてください解決策は動作します:

この記事を読んでみてください:https://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

+0

私はすでにその解決策を試しましたが、問題は私が結果を見てくださいが、私はあなたがそのURLにあなたをリダイレクトする必要がある改ページリンクをクリックするようになることが欲しかった。私の場合は起こっていなかった –

+0

あなたのページネーションURLに使うことができるいくつかの定数を宣言しようとするかもしれません。 $ _SERVER ['REQUEST_URI']などを使用しないでください。URLに問題があるため、それらは連結されるかsimilirになります...あなたのサイトパスを設定しようとします.... $ sitepath = 'http:/// localhost/test/testpage/'; – netto

関連する問題