Bir IP aralığını yönlendirmek için normal ifadeler htaccess'te nasıl çalışır?


0

Bir IP aralığını bir linkten diğerine yönlendirmeye çalışıyorum. 256 adres bloğu için bunu yapabilirim:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} ^111\.111\.111\.
RewriteCond %{REQUEST_URI} /original_link/$
RewriteRule .* /new_link/ [R=301,L]

Ancak, 8192 adres aralığını engellemeye çalışmak (xxx.xxx.128.0 - xxx.xxx.159.255), yönlendirmeyi doğru ifade etmek için düzenli ifadeler gerektirir. Bazı örnekler bulmama rağmen, parantez içine alınması gereken değerleri pek anlamadım. Birisi lütfen bu ifadeleri nasıl kullanacağınızı açıklayabilir mi?

Benim kendi girişimlerim şuna benzer:

RewriteCond %{REMOTE_HOST} ^xxx\.xxx\.1([2-5][8-9])

Yanıtlar:


1

Hayır, bu sadece eşleşir

xxx.xxx.128
xxx.xxx.129
xxx.xxx.138
xxx.xxx.139
xxx.xxx.148
xxx.xxx.149
xxx.xxx.158
xxx.xxx.159

İstediğiniz şey (regex'ler doğru araç olsa bile; burada çalışan ağ maskeleriyle eşleşmenin daha iyi bir yolu olup olmadığından emin değilim)

^xxx\.xxx\.1(2[89]|[3-5][0-9])

Parenthesised parçası maçlarının ya 2 takiben 8ya 9, ya 3 , 4ya 5herhangi bir rakam ile devam eden.

İkinci durumda "herhangi bir rakam" a ihtiyacınız vardır, aksi halde regex xxx.xxx.13.57sizin menzilinizde olmayan örneğin eşleşecektir .


Hızlı cevabınız için çok teşekkür ederim. Sanırım şimdi mantığı anlıyorum: ".1 (2 [89]" görünüşte 128 AND 129 anlamına geliyor, ancak neden 8 ila 9 arasında bir eksi yok? Ardışık değerler için bırakılamıyor mu? "|" Görünüşte tanıttı. aralığın geri kalanı Şimdi çözümü görüyorum, o kadar da zor görünmüyor :) :) Tekrar teşekkürler :)
Zerobinary99

@ Zerobinary99: temel sözdizimi olmasıdır [blah]maçlar bya lya aya h. Bir dizi karakterle (ASCII sıralamasına göre veya yerel bir harmanlama sırasına göre, süslü bir unicode uyumlu regexp motoruyla kutsanmışsanız) eşleştirmek istiyorsanız, aralığa ilk ve son karakteri koyabilirsiniz, ile ayrılmış -. Yani [ad-gm]aynı [adefgm]ve [3-5]aynı [345]. İsterseniz yazabilirsiniz [8-9]; aynı [89].
Henning Makholm

Anlıyorum. Bakalım tamamen anladı mıyım. Xxx.xxx.0.0 - xxx.xxx.193.255 aralığını belirtmek istesem, aşağıdaki ifade doğru olur mu? ^ xxx \ .xxx \. (0 | [0-1] [0-9] [0-3])
Zerobinary99

@ Zerobinary99: Hayır, bu maç olmaz xxx.xxx.114.99, çünkü 4eşleşmeyen [0-3](yalnızca rakam maçları hangi 0, 1, 2, veya 3). Bunun için bir şeylere ihtiyacınız olacak ^xxx\.xxx\.([0-9][0-9]?\.|1[0-8][0-9]|19[0-3])- oldukça canavarca, ancak regex'ler gerçekten nümerik aralıkları iyi yapamazlar.
Henning Makholm

Bu gerçekten de canavarca bir hat lol. Çözümümün neden tüm aralığı etkilemediğini anlıyorum, ancak çözümünüzün arkasındaki mantığı tam olarak anlayamıyorum. 0 ila 10-99 aralığında başladığınızı ve ardından 100-189 ila 190-193 arasında başlayan başka bir aralığı bir araya getirdiğinizi görebiliyorum. Doğru? Öyle görünüyor ki "? \." Aynı blok içinde birkaç aralığı birleştirmenin bir yoludur. Aynı blok içerisinde birden çok kez kullanılabilir mi?
Zerobinary99
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.