2013-10-29 71 views
0

我們無意中發送了一些電子郵件給格式不正確的鏈接的客戶。特別是,一個URL參數被命名爲「id」,它應該是「ri」。 我很難設置處理這些鏈接的重寫規則,並將客戶帶到正確的地方。似乎Joomla總是在我的重寫規則應用並誤解它之前「搶走」「id」參數,從而導致不必要的404錯誤。如何在Joomla安裝上重寫「id」url參數?

這在理論上應該工作:

RewriteCond %{QUERY_STRING} id=([slg][^&]+) 
RewriteRule ^([den]{2}/)?product/(.*)$ $1product/$2?ri=%1 [L,R=301] 

事實上,當我喜歡的東西取代「ID =」「XYZ =」,那麼它確實工作。但是,「id」沒有這樣的運氣。

我在Joomla中啓用了SEF鏈接和重寫。上述規則位於根文件夾中的.htaccess文件(其中還包含Joomla默認重寫規則)。 Joomla版本是2.5.14。我需要做些什麼來完成這項工作?

+0

顯示,請海基會聯繫,需要一起工作它在重寫規則 – CreatoR

+0

傳入鏈接可能看起來像這樣:'http:// myhost/product/area?id = sABC123',我需要它重定向到'http:// myhost/product/area?ri = sABC123'(如果你想知道的話:在開始處帶有'([den] {2} /)'的位只是解決我們選擇的l10n-extension的一個限制 - 應該可能會把它留下來,因爲它不是'與這個問題有關,真的)。 –

回答

0

幾點建議

  • 我會建議增加QSA標誌。這將讓雙方idri參數中顯示的網址,然後讓不同的代碼進行他們想要
  • 使這個規則爲第一條規則在不同的瀏覽器
  • 試驗,以避免任何參數301緩存問題

建議規則:

RewriteCond %{QUERY_STRING} (?:^|&)id=([slg][^&]+) [NC] 
RewriteRule ^([den]{2}/)?product/(.*)$ $1product/$2?ri=%1 [NC,QSA,NE,L,R=301] 
+0

對不起,但我絕對不希望保留「id」參數。這正是拋出Joomla,大概是因爲它已經使用自己的參數命名爲「id」的其他東西。我只是不明白它是什麼機制,甚至在根'。htaccess'踢在... –

+0

之前跳轉到那裏你能嘗試從規則中刪除QSA標誌。 – anubhava

+0

不起作用。根據rewrite.log規則永遠不會觸發,這對我來說意味着條件不符合。如果我將條件中的「id」更改爲其他內容,那麼它確實有效(我和您的規則版本)。在我看來,Joomla以某種方式從查詢字符串中彈出「id」參數,然後它甚至碰到了重寫引擎。 –

1

沒有辦法對的.htaccess之前的Joomla採取行動

如果你有這樣的條件作爲第一個,我會刪除L參數,因爲它可以讓Joomla建立自己的重寫規則。

如果要檢查,如果條件滿足,乾脆寫一個重寫規則http://www.google.com [L],檢查,該ID =參數是真的確定