0

場所に応じてアイテムを表示するプロジェクトに取り組んでいます。初めてのユーザーは、アイテムを検索するために場所を選択する必要があります。この場所は、後で参照できるように Cookie として保存されます。URL は次のようになります。

 www.example.com/newyork

ユーザーがニューヨークに存在するアイテムを見ている場合、そのアイテムの URL は次のとおりです。

 www.example.com/item/iphone

上記の URL は問題なく動作しますが、1 つ問題があります。上記の URL が初めてのユーザーにメールで転送された場合、場所が選択されていないため、このアイテムは存在しません。ユーザーを別のページに転送して場所を選択し、アイテムを探すこともできますが、これはユーザーにとって面倒です。したがって、上記のURLを次のように変更したいと思います

 www.example.com/newyork/item/iphone

そうすれば、ニューヨークを場所として使用できます。存在しないサブディレクトリを URL に追加するにはどうすればよいですか? これは PHP で実行できますか、それとも mod_rewrite で実行できますか?

4

1 に答える 1

0

リダイレクトを試すことはできますが、一致するために使用される正規表現を慎重に作成する必要があります/newyork/item/iphone。次に、パーツをグループ化してCookieを設定し、フラグnewyorkを使用してブラウザをリダイレクトできます。CO

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/item/([^/]+)$ /item/$2 [L,R,CO=location:$1:example.com:/]

これは、のようなリクエストを受け取り、パーツhttp://www.example.com/pittsburgh/item/iphoneを抽出し、(domain=example.comおよびpath=/を使用して)という名前のCookieに保存してから、ブラウザをリダイレクトしてCookieがブラウザに保存されるようにし、ブラウザを次の場所に移動させます。pittsburghlocationhttp://www.example.com/item/iphone

構文の詳細については、フラグのドキュメントをCO参照してください。

[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly] 

簡単な質問。mod_rewriteルールのない実際のリンクはwww.example.com/item.php/itemid=phoneです。このリンクをに書き換えることは可能ですか?www.example.com/newyork/item.php/itemid=phone

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/item.php/itemid=(.+)$ /item.php/itemid=$2 [L,R,CO=location:$1:example.com:/]
于 2012-09-19T23:29:08.990 に答える