2016-06-18 14 views
0

私はこの単純な.htaccessファイルを持っていますが、URLからクエリ文字列を消去しようとしています。次のURLは、URL書き換えを使用しようとしている間に最初のURLのすぐ隣に追加しています

現在のURL: - search.php/page?page = 1 & s = 14。

私はURLを達成したい: - ページ/ 1/14。

私のhtaccessファイルはこのように見えます。

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

と私のhrefは細かい作業が、私は1ページから2ページに移動しようとしているときしかし、私のURLは次のようになります。この

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月14日/ページ/ 2/14。なぜそれが起こっているのですか?

+1

あなたのリンクにあなたのhrefの先頭に "/"が足りないだけなので、ブラウザをpage2に移動させてもよろしいですか?url関連ページ1のURL? – MartinMouritzen

+0

私は自分の質問を更新しました。しかし、「/」を使用した場合、開始ページ付けは動作しません –

+0

あなたのURLを呼び出すと、「http://domain.com/page/1/14」のようなものです? 数字を手動で "http://domain.com/page/2/14"のように変更すると、正しく動作しますか? その場合は、.htaccessとは関係がありません。 – MartinMouritzen

答えて

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>'; 
} 

にコードそして、それは期待した結果が得られます。

+0

私のリンクの前に "/"を追加することで、ページ番号が機能しません。私のベースフォルダをURLから取り除くためです。それはすでに試して –

+0

ああ、あなたのベースフォルダを考慮する必要があります。だからあなたのベースフォルダが "myfolder"だとしたら、コードを何かのようにするといいでしょう。 if($ i == $ page){ $ numbers = '

  • '.$i.'
  • ';他 } { $番号= '
  • '.$i.'
  • '。 } それを相対的にしようとすると頭痛が発生します。 hrefを "../../../page/" .$i."/ ".$sterm"のように設定する必要があります。これはあまりメンテナンスできません。 – MartinMouritzen

    +0

    驚くばかりの男私はxDから私の髪を引っ張っていた。ありがとうございます –

    2

    MartinMouritzenが述べたように、/で始まらないhrefタグがある場合、現在のパスがベースになります。あなたの場合、現在のパスはpage/1/14なので、ブラウザが使用することを決定した新しいパスはpage/1/14/page/2/14です。この問題を修正する各href属性に先行するスラッシュを追加してください。

    はまた、あなたのするRewriteRule少し微調整する必要があり、それは最後のスラッシュができます:stermはそれのように思える

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

    あなたはまた、まっすぐHTMLに変数を書くことについて注意する必要があり、ユーザーが指定した可能性がありますか?それが事実なら、間違いなく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>'; 
    } 
    

    最後に、それはあなたがクローズスパンを持っているように見えますが、ない開放スパン?タグ(別名<b><i>something</b></i>)を相互に結びつけるのは技術的に有効なHTMLですが、それは良い形式ではありません。 をli要素内に必ず入れるか、liタグとspanタグが絡み合わないように、liタグをli要素の外側でspanに移動する必要があります。

    +0

    Ben martinは私のベースフォルダを選択するのを忘れていました。そして、あなたは私が本当に気づかなかったものを見つけました。提案していただきありがとうございます。 –

    関連する問題