PHPでプログラムを組み、.htaccessにてRewriteRule設定を
したところ、エラーになってしまい、困っております。
具体的には
list.php
にて商品を10件表示にし、「次のページへ」 「前のページへ」の
リンクで「次のページへ」をクリックすると、次の11件~20件、
「前のページへ」で1件~10件を表示するという、よくある仕様を
設定したページなのですが、
「次のページへ」をクリックした後、「前のページへ」を
クリックするとプラウザが止ってしまいます。
もともと、list.phpはRewrite設定で下記のように
設定しております。
RewriteEngine on
RewriteBase /
RewriteRule ^list.htm$ /list.php?page=$1&rows=$1&category_id=1&query=&sort=item_id+desc [QSA]
元URLはlist.phpですが、list.htmに見せています。
その上でさらに次のページ、前のページへのリンク先も
静的URLに見せるよう、下記のように設定しました。
RewriteEngine on
RewriteBase /
RewriteRule ^list/([0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+).htm$ /list.php?page=$1&rows=$1&category_id=$1&query=&sort=item_id+desc [QSA]
上記で例えば
list.php?page=0&rows=10&category_id=7&query=&sort=item_id+desc
のものを
list/0/10/7.htm
と表示すると読み込みに異常に時間がかかり、プラウザが止ってしまうのです。
list/10/10/7.htm
であれば正常に表示できるのですが・・・。
list.phpには下記のように記述しております。
if ( $_GET['page'] == '' ) $_GET['page'] = 0;
if ( $_GET['rows'] == '' ) $_GET['rows'] = 10;
if ( $_GET['sort'] == '' ) $_GET['sort'] = 'item_id desc';
//
$delta = 3 * $_GET['rows'];
if ( $_GET['page'] - $delta < 0 ) $s = 0; else $s = $_GET['page'] - $delta;
if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta;
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"><span class="x12"><? if ( $_GET['page'] >= $_GET['rows'] ) { ?>
<a href="list/<?= $_GET['rows'] - $_GET['page'] ?>/<?= $_GET['rows'] ?>/<?= $_GET['category_id'] ?>.htm">≪前のページ</a>
<? } ?>
<? for ( $m = $s; $m <= $e; $m = $m + $_GET['rows']) { ?>
<a href="list/<?= $_GET['rows'] - $_GET['page'] ?>/<?= $_GET['rows'] ?>/<?= $_GET['category_id'] ?>.htm">
<? if ( $m == $_GET['page']) echo "$color" . (( $m / $_GET['rows'] ) + '1') . "</font>"; else echo ( $m / $_GET['rows'] + 1 ) ?></a>
<? } ?>
<? if ( $num_rows > $_GET['page'] + 1 ){ ?>
<a href="list/<?= $_GET['page'] + $_GET['rows'] ?>/<?= $_GET['rows'] ?>/<?= $_GET['category_id'] ?>.htm">次のページ≫</a>
<? } ?></span></td>
</tr>
</table>
どなたかお分かりになられる方がいらっしゃいましたら是非とも
御教授いただけますと大変たすかります。
足りない点などございましたらご指摘いただけますと幸いです。
早急に追記、回答させていただきます。
何卒、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
遅くなる原因は良く解らないのですが、
RewriteRule ^list/([0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+).htm$ /list.php?page=$1&rows=$2&category_id=$3&query=&sort=item_id+desc [QSA]
と書くべきじゃないでしょうか。
また、勘ですがRewriteBaseは書かなくて良い気がします。
RewriteEngine on
RewriteRule ^list/([0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+).htm$ list.php?page=$1&rows=$1&category_id=$1&query=&sort=item_id+desc [QSA]
こんなのでいいんじゃないでしょうか
お教えいただきまして誠にありがとうございました。
おっしゃるとおりでした。
単純なミスで誠に申し訳ありません。
お教えいただいたコードで書くと、正常に遷移できるようになりました。
本当にありがとうございました。
No.3
- 回答日時:
回答1と回答2を勝手に合わせると
rows=$1 には 0 が入るので無限ループとなる、でFAですかね。
入力値をそのまま繰り返し構文に入れるのは危ないという結果です。
if ($rows > 0) など判定しないとね。
なるほど、やはりrows=$1 に 0 が入るのは 危険ですね。
該当箇所も修正するようにしました。
アドバイスいただきまして本当にありがとうございました!
No.2
- 回答日時:
単純に無限ループしているのでは?
for ( $m = $s; $m <= $e; $m = $m + $_GET['rows']) {}
$m は $s から $e までですけどインクリメントされる $_GET['rows'] が
0 と見なされると終わりませんよね。
一方、生の $_GET['rows'] が '0' (Stringになる) だと
if ( $_GET['rows'] == '' ) $_GET['rows'] = 10;
これは通らないので '0' のままとなります。
具体的な解決方法ではないですが参考までに。
分かりやすいご説明ありがとうございました!
結果私の単純なコードの書き方ミスのようでしたが、
参考にさせていただきます。誠にありがとうございます。
本当に皆さんありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(プログラミング・Web制作) PHPの$_SERVER["REQUEST_URL"]の0文字目は必ず"/"になることになってるの? 1 2023/07/07 17:42
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Visual Basic(VBA) VBAでWEBサーバー上に保存されたPDFファイルのリンク有効チェックについて 1 2022/11/11 16:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
phpでcookieがうまく保存されない
-
awsにApacheとPHPを入れて、何...
-
値の取り出し方について教えて...
-
オススメのプログラミングスク...
-
PHPSpreadsheetを使って関数を...
-
ワードプレスサイト PHP8.0.25...
-
PHPで訪問回数を表示するカウン...
-
imageフォルダに、画像をリサイ...
-
ECCUBE4のページ管理でPHPを実...
-
入力フォームの空白や改行を制...
-
htmlのエラーについて(デバッグ)
-
PHP8を使うと、大量のWarningが...
-
ファイルアップロードに関して...
-
Q&Aサイトを作成していてURLの...
-
アップロード画像数でCSSを分け...
-
掲示板を作成しておりアップロ...
-
PHP一覧表示した項目にリンクを...
-
PHPでユーザー情報を入力して簡...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WordPressのLighting(テーマ)に...
-
アップロードファイルの数に応...
-
PHPのソース変更が反映されない
-
Wordpressで記事がない場合にメ...
-
phpの表示領域をしていしたい!
-
変数で日付を指定し、新しい順...
-
DreamweaverとWordPressの連携
-
外部ファイルの読み込み
-
wordpress投稿内でcgiを動かしたい
-
ワードプレスでカテゴリー毎に...
-
WP/ 記事タイトルをクリックさ...
-
Smarty コンバートエラー??
-
wordpress カスタム投稿タイプ...
-
CentOSでhtaccessを使用してmod...
-
PHPのクッキーによるリダイレクト
-
wordpressのリンクでの質問です。
-
Webデザイナー向けLinuxユーザ...
-
URL短縮ツール「楽々URL」をさ...
-
PHP初心者です。
-
ランキングを表示する際の画像...
おすすめ情報