0

わかりましたので、カテゴリごとに製品をリストするプロジェクトがありますが、すべての製品もリストしています。そのためのページネーションを作成しましたが、うまく機能します。カテゴリのページングで動作するように mod_rewrite を設定しましたが、すべての製品に対して設定することができません。動作するのは www.domain.com/catalogue/catid/catname/pagenumber で、私も www.domain.com/catalogue/pagenumber にしたいのですが、ここで mod の書き換えが問題になります。

    RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]

2番目のリンクを呼び出そうとすると、彼はそのページ番号をcidとして扱います。したがって、必要なものを読み取るように mod rewrite を設定し、この場合は cid と cname を無視したいと考えています。

4

3 に答える 3

3

これに代わるものを教えていただきたいです..

まだ少し問題があるように見える正規表現を使用する代わりに..もっと簡単な方法があります。

すべてを index.php にリダイレクトすると、例外はありません。その後、インデックス PHP 内で、$_SERVER['REQUEST_URI'] を使用して現在の URL を読み取ることができ、' を使用するとexplode('/', $url);、このすべての処理を非常に簡単に実行できます。

これは、ルーティングを行うためのより自然な方法です。

于 2012-06-22T10:05:05.933 に答える
0

次のようなリンクが絶対に得られないことが確実な場合は、2つのルールを使用してみませんcatalogue/catid/pagenumberか?

RewriteRule ^([^/]*)/([^/]*)$ index.php?p=$1&page=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]
于 2012-06-22T16:05:19.317 に答える
0

mod_rewrite でこれを行うための非常に信頼できる方法はありません。

最も信頼できる方法は、PHP でこれをチェックすることです。

主な方法は 2 つあります。

  • エバートが言及しているように、すべてを問題のページにリダイレクトし、そこからURLを解読します。これはほとんどの場合です

  • 2 つ目は、受け取った $_GET 変数の量を検出し、PHP 内で取得したものに対してページがどのように反応するかを判断することです。

あなたが求めていることは、正規表現では非常に単純ではなく、非常に高速でもありません。したがって、正規表現にそれを実行させようとするのではなく、この句をPHPに平手打ちすることをお勧めします。

于 2012-06-22T10:09:19.150 に答える