我試圖找到解決方案,但找不到。
一段時間以來,我一直在我的 htaccess 中使用這些行來阻止舊版本或過時版本的 Firefox 和 Chrome,因為它們中的大多數都被機器人/受感染的主機使用。
BrowserMatchNoCase "Chrome/[17.0.0.0-86.0.0.0]" bad_bots
BrowserMatchNoCase "Firefox/[3.0-86.0]" bad_bots
它完美無缺,據我了解它正在阻塞:(我是對的嗎?)
- 從 17.0.0.0 到 86.0.0.0 的每個 Chrome 瀏覽器版本
- 從 3.0 到 86.0.0.0 的每個 Firefox 瀏覽器版本
但是最近,自從 Chrome 和 FF 更新到 100 后,事情并沒有按預期作業。我的規則是阻止這些瀏覽器版本,所以暫時,我做了一個骯臟的解決方法,添加:
BrowserMatchNoCase "Chrome/100" !bad_bots
BrowserMatchNoCase "Firefox/100" !bad_bots
etc...
我的問題 :
是否有可能解決該“問題”而不阻止 100 及更高版本的瀏覽器版本?如何 ?
是否可以使用 BrowserMatchNoCase 保留這些規則?
非常感謝。
uj5u.com熱心網友回復:
BrowserMatchNoCase "Chrome/[17.0.0.0-86.0.0.0]" bad_bots BrowserMatchNoCase "Firefox/[3.0-86.0]" bad_bots它完美無缺,據我了解它正在阻塞:(我是對的嗎?)
- 從 17.0.0.0 到 86.0.0.0 的每個 Chrome 瀏覽器版本
- 從 3.0 到 86.0.0.0 的每個 Firefox 瀏覽器版本
不,它根本沒有這樣做!您不能使用正則運算式指定這樣的數字范圍。
regex[17.0.0.0-86.0.0.0]是一個字符類,與 simple [.012345678](or [.0-8]) 相同,它匹配方括號之間列出的字符中的單個字符。連字符 ( -) 表示一個ascii 字符范圍。例如。a-z.
因此,您的正則運算式Chrome/[17.0.0.0-86.0.0.0]匹配任何包含以下子字串之一的用戶代理:
Chrome/.Chrome/0Chrome/1Chrome/2Chrome/3Chrome/4Chrome/5Chrome/6Chrome/7Chrome/8
因此,它基本上會阻止任何不以9. 換句話說,它將允許版本 9 和 90 到 99 并阻止其他所有內容(直到我們最終到達版本 900!)。
如果您仍想遵循相同的方法并阻止舊的用戶代理字串,那么您需要遵循“骯臟的解決方法”并為您確實想要允許的用戶代理打孔。盡管您可以概括一下并允許數百個版本中的任何版本,例如。1\d\d(1 后跟兩位數)
例如,阻止一切然后允許特定的用戶代理模式會更容易:
# Block all Chrome User-Agents
BrowserMatchNoCase "Chrome/" bad_bots
# Allow Chrome versions 87, 88, 89, 90-99, 100
BrowserMatch "Chrome/(8[789]|9\d|\d\d\d)\." !bad_bots
請注意,我專門使用BrowserMatch(而不是BrowserMatchNoCase)來表示允許的情況,因為官方 Chrome 用戶代理總是有一個大寫的C.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459224.html
