2010-11-20 13 views
0

mod_rewrite:同様のURLが同じpage.phpに移動しないようにする

first URLは、この種のコンテンツ用です。メイン情報を編集したいときは、次のようにします。

http://site.com/product/Nintento/Wii/edit => php/prd_edit.php 
second URL second URL製品内のコンポーネントのリストを編集したいとき

http://site.com/product/Nintento/Wii/components/edit => php/prd_comp_edit.php 

second URLを数字にすると、Wii/componentsは製品名として読み取られるため、mod_rewriteではなくprd_edit.phpにリダイレクトされます。

これを避けるには、([^/\<\>].+?)を使用して/のような文字を使用できないように指定しますが、それでもWii/componentsという製品名が読み取られます。

どうすればこの問題を解決できますか?

答えて

1

まず、2回目のリライトを移動して[L]フラグを追加してください。これで問題が解決します。ここではさらに最適化がいくつかあります。

RewriteRule ^product/(.+?)/(.+?)/components/edit/?$ php/prd_comp_edit.php?cat1=$1&cat2=$2 [L] 
RewriteRule ^product/(.+?)/(.+?)/edit/?$ php/prd_edit.php?cat1=$1&cat2=$2 [L] 

今、あなたの例を考えると、$_GET['cat1'] == "Nintendo"$_GET['cat2'] == "wii"

+0

申し訳ありませんが、これは動作していないようです私は製品名Wii/componentsとして得る問題がある – vitto

+0

あなたは[L]タグを追加しましたか?それ以外の場合は、最初のものと一致し、2番目のものと一致して、それを上書きします... –

+0

申し訳ありません、私の間違いです、この例を見て、私は正しく修正しました。 – vitto

0
RewriteCond %{REQUEST_URI} ^/product 
RewriteRule /components/edit/?$ php/prd_comp_edit.php [L] 
RewriteRule /edit/?$ php/prd_edit.php [L] 

あなたにも深くネストされた製品群を持つことができるようになります。この方法は:D

EDIT

$uri = $_SERVER['REQUEST_URI']; 

// Split the URI apart using explode or any other suitable method 
$parts = explode('/', rtrim($uri, '/')); 

// Now throw away any part that is not connected to a product 
// You know that the URI started with product and also know 
// that it ended with components and/or edit 

// $x = file is prd_comp_edit.php ? 3 : 2 
$parts = array_slice($parts, 1, count($parts) - $x); 

// Now there you have it, the products hierarchy ready to be processed further 
+0

私はmod_rewとhtaccessのマスターではありません、私は製造元と製品名のようなvarsを挿入すべきですか? – vitto

+0

これは、細かい粒度のルールを実装する必要がある場合には、PITAになる可能性があるため、.htaccessではなくアプリケーションで取り組むことになります。私のEDITを見て、それは正しい方向にあなたを導くでしょう。 – aefxx

関連する問題