2012-09-19 42 views
0

我在根據位置顯示項目的項目上工作。第一次用戶必須選擇一個位置才能搜索一個項目。這個位置被保存爲cookie以供將來參考。該URL如下:添加位置作爲與mod重寫的url的子目錄?

www.example.com/newyork 

如果用戶正在尋找存在於紐約的一個項目,該項目的網址是:

www.example.com/item/iphone 

上述網址工作正常,但有一個問題。如果上述網址通過電子郵件轉發給第一次使用者,則此項目不存在,因爲未選擇該位置。我可以將用戶轉發到不同的頁面以選擇位置,然後查找該項目,但這對用戶來說很麻煩。所以,我想改變上面的網址到

www.example.com/newyork/item/iphone 

這樣,我可以使用紐約作爲位置。如何將一個不存在的子目錄添加到一個url? Canthis用PHP完成還是用mod_rewrite完成?

+0

你可以讓'www.example.com /紐約/項目/ iphone'改寫爲'www.example.com /項目/ iphone'但會發生什麼「紐約」部分?你說它應該是在一個餅乾? –

+0

好吧,「紐約」部分沒有任何反應,它只是留在cookie中供將來參考。我試圖做到這一點的主要原因是爲了更好地服務於電子郵件鏈接或轉發。如果鏈接僅提供[鏈接](www.example.com/item/iphone),則無法分辨用戶位置(除非我將用戶轉發到不同的頁面以選擇位置)。而如果鏈接已經有位置[鏈接](www.example.com/newyork/item/iphone),那麼我們可以爲第一次用戶提供詢問位置。這種情況主要適用於轉發或電子郵件鏈接。希望它是有道理的。 – Hari

+0

但是,如果有人從電子郵件中訪問「www.example.com/newyork/item/iphone」鏈接,並且它會被重寫以便「/ item/iphone」獲得服務,那麼「/ item/iphone」如何知道位置是,沒有cookie,因爲他們點擊了電子郵件中的鏈接。 –

回答

0

你可以嘗試做一個重定向,但你必須精心製作用於匹配/newyork/item/iphone的正則表達式。然後,您可以將newyork部分分組,並設置cookie並使用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並提取pittsburgh部分,將其存儲在名爲location餅乾(與域= example.com和路徑= /),則瀏覽器重定向所以該cookie被存儲通過瀏覽器,使瀏覽器去http://www.example.com/item/iphone

documentation for the CO flag關於語法的詳細信息:

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

快速的問題。沒有mod_rewrite規則的acutal鏈接是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:/] 
+0

謝謝。我會試試看。 – Hari

+0

@哈里當然,看我的編輯 –