2013-05-31 22 views
7

.htaccess kullanarak belirli klasörleri erişmelerine izin verin:yapılandırmak yalnızca belirli alanlar aşağıdaki gibi bir senaryoyu yaşıyorum

Örneğin, ben bir web sitesi http://www.example.com var ve kurulum birkaç alt alanınız varsa gibi http://video.example.com, http://image1.example.com, http://image2.example.com . Apache sanal konak ayarında, aynı klasörü kullanıyorlar (ör. /home/example/). (bu iki alanın mod_cband kullanılarak farklı bant genişliği ayarları vardır).

ben alt alan http://video.example.com/files/videos/ ama http://www.example.com/files/videos/ değil veya başka herhangi bir etki alanlarından gelen sadece erişilebilir hale getirmek isteriz, bir alt klasörler /home/example/files/videos var.

Bunu bir .htaccess dosyasıyla nasıl yapılandırabilirim?

+0

bu kod Bunun için en yaygın “çözüm” tır. Rağmen, yönlendirenin güvenilmez olması. – CBroe

cevap

12

koyun Refe denetleme /home/mywebsite/files/videos/.htaccess

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase /files/videos/ 

# if it is not for domain video.mywebsite.com then block it 
RewriteCond %{HTTP_HOST} !^video\.mywebsite\.com$ [NC] 
RewriteRule^- [F] 
-2
rewritecond %{HTTP_HOST} video.mywebsite.com [s=1] 
rewriterule files/videos/.* - [F] 
2

Sen ana kontrol edip mod_rewrite bir .htaccess dosyasında bir 301 yönlendirmesi oluşturma ile bu işleyebilir; Eğer erişiminiz varsa, bunu httpd.conf veya bunun yerine bir yapılandırma dosyasında yaparsanız daha iyidir. mod_cband her bir alan için farklı virtualhost istiyor gibi görünüyor yana

İyi Senaryo

, kurulum bu gibi httpd.conf dosya şey olur hem de yapılandırma kendisi yeniden yazma kuralları içerir. yukarı

<VirtualHost *:80> 
    ServerName www.mywebsite.com 
    DocumentRoot /home/mywebsite/ 

    RewriteEngine on 
    RewriteRule ^/files/videos/(.*)$ http://video.mywebsite.com/$1 [R=301,L] 
    RewriteRule ^/files/images1/(.*)$ http://image1.mywebsite.com/$1 [R=301,L] 
    RewriteRule ^/files/images2/(.*)$ http://image2.mywebsite.com/$1 [R=301,L] 

</VirtualHost> 

<VirtualHost *:80> 
    ServerName video.mywebsite.com 
    DocumentRoot /home/mywebsite/files/video/ 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName image1.mywebsite.com 
    DocumentRoot /home/mywebsite/files/images1/ 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName image2.mywebsite.com 
    DocumentRoot /home/mywebsite/files/images2/ 
</VirtualHost> 

Runner barındıran bir hizmet sağlayıcı kullanıyorsanız: ana hesap sitesi DocumentRoot ve bu dizin var kapsamındaki diğer sitelerin tüm yuvalanmış nerede Bazı web barındıran bu yöntemi yapacak Burada, httpd.conf dosyalarına erişemezsiniz ve etki alanlarını ana etki alanının alias olarak ayarlamamışlardır (her etki alanının ayrı bir klasörü vardır), daha sonra kurallarınızı köküne www.mywebsite.com gibi yazabilirsiniz. bu:

RewriteEngine On 
    RewriteRule ^(files/videos/.*)$ http://video.mywebsite.com/$1 [R=301,L] 
    RewriteRule ^(files/images1/.*)$ http://image1.mywebsite.com/$1 [R=301,L] 
    RewriteRule ^(files/images2/.*)$ http://image2.mywebsite.com/$1 [R=301,L] 

En havai

onlar (her şeyi tam aynı belge kökü sahip olduğu) o zaman yaygın herkes tarafından çıkarılan oluyor bir .htaccess dosya ile istenen hostname kontrol etmek gerekir takma ad kullanıyorsanız:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^video.mywebsite.com$ 
RewriteRule ^(files/videos/.*)$ http://video.mywebsite.com/$1 [R=301,L] 

    #Check to make sure if they're on the video domain 
    #that they're in the video folder otherwise 301 to www 
    RewriteCond %{HTTP_HOST} ^video.mywebsite.com$ 
    RewriteCond %{REQUEST_URI} !^/files/videos [NC] 
    RewriteRule ^.*$ http://www.mywebsite.com/ [R=301,L] 


RewriteCond %{HTTP_HOST} !^image1.mywebsite.com$ 
RewriteRule ^(files/images1/.*)$ http://image1.mywebsite.com/$1 [R=301,L] 

    #Check to make sure if they're on the image1 domain 
    #that they're in the images1 folder 
    RewriteCond %{HTTP_HOST} ^image1.mywebsite.com$ 
    RewriteCond %{REQUEST_URI} !^/files/images1 [NC] 
    RewriteRule ^.*$ http://www.mywebsite.com/ [R=301,L] 

RewriteCond %{HTTP_HOST} !^image2.mywebsite.com$ 
RewriteRule ^(files/images2/.*)$ http://image2.mywebsite.com/$1 [R=301,L] 

    #Check to make sure if they're on the image1 domain 
    #that they're in the images2 folder 
    RewriteCond %{HTTP_HOST} ^image2.mywebsite.com$ 
    RewriteCond %{REQUEST_URI} !^/files/images2 [NC] 
    RewriteRule ^.*$ http://www.mywebsite.com/ [R=301,L] 
İlgili konular