抱歉標題不好,我不知道如何正確表達。我有一個 URL,例如 /color-white/size-large/,我需要在 htaccess 中重寫它。在正則運算式之后,字串應該看起來像 &color=white&size=large。
我不想對顏色、大小、顏色和大小進行多次重寫。
我想出了(colour|size)-(.*?)\/字串 colour-white/size-large/ 的替換,$1=$2&它回傳 colour=white&size=large&,但是當開頭有 / 時它會中斷,我不希望最終的字串有尾隨 &。
編輯:\/*(colour|size)-(.*?)\/ &$1=$2有效,但是一旦前面有其他文本,它就會中斷,我猜是因為使用全域選項,它每次查找顏色或大小時都會嘗試匹配之前的文本。
uj5u.com熱心網友回復:
為不同數量的引數添加多個重寫規則是很常見的。這有效,包括它之前的內容(“連衣裙”)最多三個引數。添加第四個引數只是第四行。所需規則的數量隨著引數的數量線性增加,而不是指數增加。
RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity)-([^/] )/(colour|size|rarity)-([^/] )/(colour|size|rarity)-([^/] )/ $1?$2=$3&$4=$5&$6=$7 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/] )/(colour|size|rarity)-([^/] )/ $1?$2=$3&$4=$5 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/] )/ $1?$2=$3 [L]
另一種方法是將所有這些作為單個引數傳遞并在您的處理程式中決議它。在 PHP、Java、Perl 或任何你的后端語言中決議任意引數要干凈得多。此代碼會將任意數量的它們放入“選項”引數中以在后端決議:
RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity-[^/] /) $1?options=$2 [L]
您還應該退后一步,詢問這是否是您真正想要或需要做的事情。將任意引數粘貼到 URL 路徑中并不比將它們放在查詢字串中更友好。您的最佳 URL 實際上可能是您可以在我對 SEO-friendly way to pass multiple values in a URL parameter 的回答/dresses?size=large&colour=blue 中閱讀我的全部推理
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477153.html
標籤:正则表达式 阿帕奇 .htaccess url重写 阿帕奇2
