Tümünü reddet, htaccess ile yalnızca bir IP'ye izin ver


157

Hepsini reddetmeye ve sadece tek bir IP için izin vermeye çalışıyorum. Ancak, bu tek IP için aşağıdaki htaccess çalışmasını istiyorum. Her ikisini de çalışmanın bir yolunu bulamıyorum: tümünü reddet ve sadece bir tanesine izin ver, ayrıca aşağıdaki seçenekler:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

Bu işi yapmanın bir yolu var mı?

Yanıtlar:


357
order deny,allow
deny from all
allow from <your ip> 

95
NOT! Apache, htaccess'teki boşluklara duyarlıdır. Reddetme arasında boşluk bırakmayın, izin verin. Siparişi reddetme, izin verme.
H.Rabiee

2
BILGI: - IPv6 için de çalışır! sadece başka bir satır ekleallow from yourIPv6
jave.web

Nginx'te mümkün mü?
shgnInc

10
2.4 dokümanlar hakkında not : mod_access_compat tarafından sağlanan İzin Ver, Reddet ve Sipariş yönergeleri kullanımdan kaldırılmıştır ve gelecekteki bir sürümde kaldırılacaktır. Bunları kullanmaktan kaçınmalı ve kullanılmasını öneren eski eğiticilerden kaçınmalısınız.
Martin Schneider

4
@ MA-Maddin'in işaret ettiği gibi, - sonra mod_access_compat kullanımdan kaldırılmıştır. Bu yayın daha yeni sürümlerde nasıl yapılacağını gösterir. Ayrıca, sunucu bir proxy kullanıyorsa, o zaman ziyaretçi için proxy-IP'yi görüntüleyeceği için de düşünülmelidir. Bu yazı buna bir çözüm önermektedir.
Zeth

115

Bu sorunun zaten kabul edilmiş bir cevabı olduğunu biliyorum, ancak Apache belgeleri şöyle diyor:

Mod_access_compat tarafından sağlanan İzin Ver, Reddet ve Sipariş yönergeleri kullanımdan kaldırılmıştır ve gelecekteki bir sürümde kullanımdan kaldırılacaktır. Bunları kullanmaktan kaçınmalı ve kullanılmasını öneren eski eğiticilerden kaçınmalısınız.

Bu nedenle, geleceğe daha uygun bir cevap şöyle olacaktır:

<RequireAll>
    Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

Umarım, bu sayfanın bu "modası geçmiş öğreticilerden biri haline gelmesini önlemeye yardımcı oldum. :)


IP adresimizi nereye koyacağız?
Gary Carlyle Cook

1
Gitme zamanı! Bu, sadece çalışma değil, aynı zamanda zamana karşı da dayanıklı olduğu için çözüm olarak kabul edilmelidir.
6opko

Diğer cevap durumumda yardımcı olmadı. Ama bunu yaptı. Eski bir iş parçacığını güncellediğiniz için teşekkürler.
Johann Dyck

1
Bu yanıtın örneği iki IP'den erişime izin veriyor mu? Yani, birden fazla IP eklemek için aralarına bir boşluk koyuyoruz mu? Require ipDaha kullanıcı tarafından okunabilir hale getirmek için birden fazla satır koyabilir misiniz veya tüm IP'lerin bir satırda olması gerekir mi?
Hastig Zusammenstellen

bunu kullandıysanız, bazı yanıtların yaptığı gibi yeni bir geçici sayfaya nasıl yönlendirirsiniz?
rudtek

39

Bu, söz konusu görev için tasarlanmış direktif kullanılarak geliştirilebilir.

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

Burada 111.222.333.444 statik IP adresinizdir.

"Sipariş İzin Ver, Reddet" yönergesini kullanırken, isteklerin İzin Ver veya Reddet komutuyla eşleşmesi gerekir; hiçbiri karşılanmazsa, istek reddedilir.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order


1
acustom uRL nasıl eklenir?
saniye 25.07'de

32

Erişimi reddedilenlere gösterilecek özel bir sayfa da dahil olmak üzere yukarıdakilerin biraz değiştirilmiş versiyonu:

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

... ve bu şekilde 111.222.333.444'ten gelen olmayan istekler belirli_sayfa.html

(yeni satırlar kaybolduğu için bunu yorum olarak göndermek korkunç görünüyordu)


Selam. Benim .htaccess ile aynı kod var ama ben 500 hata almaya devam ediyorum. Belirttiğim sayfa denir test.htmlve ile aynı klasörde bulunur .htaccess. Ancak, günlükleri (sunucudan izin verilmiyor) göremiyorum. Neden bu problemi yaşayabileceğime dair bir fikrin var mı? Bir ftp istemcisi aracılığıyla dosyanın yolunu aldığımda /test.htmlyolun bir sorun olmaması gerektiğini söylüyor, değil mi?
Musterknabe

Ayrıca, hata hatası ile satır yorum yaptım bile 500 hata geliyor. Yani sorun bu olmamalı. Diğer 3 hattın çalışmamasının bir nedeni var mı? .Htaccess'imde www olmayanları www'e yönlendirdiğim üç satır daha var, ama bu kadar. Ama ben sadece SADECE reddet, izin, vb ile üç satır olduğunda da hata alıyorum
Musterknabe

Özel URL nasıl eklenir?
saniye 25-019'da

8

Önceki cevapların biraz daha iyileştirilmesiyle, sitede değişiklikler yaparken kullanıcılarınıza bir bakım sayfası gösterilebilir:

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

Nerede:


ErrorDocument 403'ü kullandığımda, bu dosyaya erişemediği için bu maintenance.html dosyası için ek bir 403 hatası alıyorum. Bunun için bir çözümünüz var mı?
Zdravko Donev

3

@David Brown'un cevabına ek olarak, bir IP'yi engellemek istiyorsanız, önce hepsine izin vermeli, sonra IP'leri şu şekilde engellemelisiniz:

    <RequireAll>
      Require all granted
      Require not ip 10.0.0.0/255.0.0.0
      Require not ip 172.16.0.0/12
      Require not ip 192.168
    </RequireAll>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

Yukarıda belirtilen notasyonlardan herhangi birini CIDR gereksinimlerinize uyacak şekilde kullanabilirsiniz.


Teşekkürler, Apache 2.4 ile başa çıkmanın doğru yolu budur!
Aleksandar Pavić

2

Sitenize erişime izin vermek ve sitenize erişimi engellemek için htaccess'te aşağıdakileri kullanabilirsiniz:

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

İstemci ip adresi kalıpla eşleşirse ilk önce bir env değişkeni izin parametresi belirleriz , kalıp eşleşirse env değişkeni izin parametresi 1 değeri atanır .

Bir sonraki adımda, siteye erişime izin vermek ve siteye erişimi reddetmek için İzin Ver, reddet yönergeleri kullanıyoruz. Order deny,allowsırasını temsil eder denyve allow. deny from allbu satır sunucuya herkesi reddetmesini söyler. son satır allow from env=allowedip, env değişkenini ayarladığımız tek bir IP adresine erişim sağlar.

1\.2\.3\.4\.5İzin verilen ip adresinizle değiştirin .

Referanslar:


1
324.234.22.1'e İzin Ver yerine bunu kullanmanın avantajları nelerdir?
Berry M.

2

403 yöntemini kullanamadım çünkü sunucumdaki bir alt klasördeki bakım sayfası ve sayfa görüntülerini istedim, bu yüzden tek bir IP dışında herkes için bir 'bakım sayfasına' yönlendirmek için aşağıdaki yaklaşımı kullandı *

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

Kaynak: WordPress blogunuzu gizlemek için bir tutma sayfası oluşturma


Bu çözüm en basit - tercih ediyorum
Gerfried

1

Birden fazla IP'niz ve hatta kullanıcı, ana makine adı, ... gibi daha fazla izin verebilirsiniz. Daha fazla bilgi burada https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip


0

Aşağıdaki komutu .htaccess dosyasına ekleyin. Ve bu dosyayı htdocs klasörünüze yerleştirin.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

Benim için bu çalışıyor gibi görünüyor (IPv4 yerine IPv6 kullanarak) Bunun bazı web siteleri için farklı olup olmadığını bilmiyorum ama benim için çalışıyor.

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.