2011-07-13 15 views
2

ルールを組み合わせる:htaccessファイルは、私は2つのhtaccessファイルの書き換えルールを持っている

RewriteRule ^tag/([^/\.]+)/?$ index.php?p=tag&tag=$1&pg=1 [L] 
RewriteRule ^tag/([^/\.]+)/([0-9]+)/?$ index.php?p=tag&tag=$1&pg=$2 [L] 

例:

の1- mysite.ext/tag/php/

2 - mysite.ext/tag/php/13/

いることを知って、2を組み合わせることが可能ですページ番号である2番目の引数は、ページネーションの場合のようにオプションですか?

PG "(1 | $ 2)となります「だから" だから "PG" は(1|$2)(PG = 1またはPG =ページ番号)

+1

はないだろう'pg'が空であるかどうかをあなたのコードでチェックして、それが' 1'であると考える方が簡単でしょうか? – kapa

答えて

2

になります(PG = 1またはPG =ページ番号)」

残念ながら、それはそのようには機能しません。 mysite.ext/tag/php/が要求された場合、それがindex.php?p=tag&tag=php&pg=に書き換えます

RewriteRule ^tag/([^/\.]+)/?(\d+)?/?$ index.php?p=tag&tag=$1&pg=$2 [QSA,NC,L] 

:あなたが何ができるかを最善のは、このルールを使用することです。 pgパラメータは空です(ご覧のとおり)。 - 何をする必要がpgが、その後1の値を割り当てる空であるかどうかを確認するindex.php内のコードの余分なビットを置くことです:

$page_number = isset($_GET['pg']) ? $_GET['pg'] : ''; 
if (empty($page_number)) { 
    $page_number = 1; 
} 
else { 
    // convert it to INT type 
    $page_number = (int)$page_number; 
} 

コードは、上記のようにあまりにも多く(あまりにも安全なアプローチ)に見えるかもしれませんが、これは私がやりたいことです(電子商取引サイトのセキュリティを最優先にしているとき)。 (私はそれを短くするために完全な検証をスキップしました)

しかし、あなたはそれがはるかに小さくすることができますあなたが望むなら、(あなたはまだ、とにかく入力されたデータを検証する必要がある):

$page_number = isset($_GET['pg']) ? $_GET['pg'] : ''; 
if (empty($page_number)) $page_number = 1; 
関連する問題