簡體   English   中英

包含特定單詞的 htaccess 重寫規則

[英]htaccess rewrite rule containing certain word

我有一家 magento web 商店,我使用插件導入庫存、價格和產品。 令人討厭的是,如果我更新產品名稱等,這個插件不會保存舊的 url。有沒有辦法用 .htaccess 來做到這一點? 例如,我從產品 URL 的末尾刪除了 SKU,但谷歌已將其中一些舊 URL 編入索引。

是否可以將https://www.example.com/xerox-everyday-toner-for-tn242y-yellow-toner-cartridge-006r04226重寫為https://www.example.com/xerox-everyday-toner-for-tn242y-yellow-toner-cartridge使用一些通配符? 顯然,每個產品“墨盒”一詞之前的所有內容都會發生變化,因此我想要一個重定向,如果 URL 包含“-cartridge-”,則刪除該模式之后的所有內容,因為 SKU 長度可以更改但僅包含字母數字字符。 如果 URL 不包含“-cartridge-”,則不要執行任何操作。 我已經使用 online.htaccess 生成器嘗試了一些正則表達式模式,但我似乎無法正確理解(除非這些網站不處理正則表達式,這就是我認為它們不起作用的原因)。

RewriteRule (.+-cartridge)-.+$ $1 [R=301,L]

這應該可以完成工作。 直到-cartridge的所有內容都被捕獲(在一個 go 中捕獲之前的動態部分和這個 static 后綴,意味着我們沒有從多個部分中組裝替換 URL,但可以只使用$1 ),然后是-加必須跟隨一些任意字符。

無論如何,您是否可以添加一條規則,以便排除“多件包裝”是否出現在“-cartridge-”之后。

通常最簡單的方法是在重寫規則之前放置一個“什么都不做”規則。 然后您可以使用匹配(“如果 URL 以-cartridge-multipack結尾,什么也不做”),而不是試圖找到否定模式。

RewriteRule -cartridge-multipack$ - [L]
RewriteRule (.+-cartridge)-.+$ $1 [R=301,L]

模式以$錨定在末尾(意味着在此之后不允許任何內容), -用於“無替換”,以及使重寫引擎停止當前輪處理的L標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM