2013-05-31 14 views
7

Mam scenariusz, w następujący sposób:configure pozwalają jedynie konkretne domeny dostęp do niektórych folderów za pomocą .htaccess

Na przykład, mam stronę internetową http://www.example.com i mam skonfigurować kilka subdomen, takich jak http://video.example.com, http://image1.example.com, http://image2.example.com . W ustawieniach hosta wirtualnego Apache używają tego samego folderu (np. /home/example/). (te dwie domeny mają różne ustawienia przepustowości za pomocą mod_cband).

Mam podfoldery /home/example/files/videos, chcę aby była dostępna tylko z subdomeny http://video.example.com/files/videos/ ale nie od http://www.example.com/files/videos/ lub innych subdomen.

Jak skonfigurować to z plikiem .htaccess?

+0

Sprawdzanie refe rrer jest najczęstszym "rozwiązaniem" dla tego - w cudzysłowie, ponieważ polecający jest niewiarygodny. – CBroe

Odpowiedz

12

umieścić ten kod w /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

Można sprawdzić hosta, a następnie obsłużyć to z mod_rewrite tworzenia przekierowanie 301 w pliku .htaccess; chociaż jeśli masz dostęp, to znacznie lepiej, jeśli zrobisz to w httpd.conf lub dołączonym pliku konfiguracyjnym.

Najlepszy Scenariusz

Ponieważ wygląda mod_cband chce inny virtualhost dla każdej domeny, by skonfigurować swoją httpd.conf pliku coś takiego i obejmują reguły przepisywania w samej konfiguracji. Niektóre hosty zrobi tę metodę gdzie głównym miejscem konto jest DocumentRoot i wszystkie inne miejsca są zagnieżdżone pod to katalog:

<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 up

Jeśli używasz dostawcy usług hostingowych gdzie, nie masz dostępu do plików httpd.conf i nie ustawiły domen jako alias głównej domeny (każda domena ma oddzielny folder), następnie zapisałeś swoje reguły w katalogu głównym .htaccess dla domeny to:

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] 

Większość napowietrznych

Jeśli są one za pomocą aliasów (gdzie wszystko ma dokładnie ten sam korzeń dokumentu), to musisz sprawdzić żądaną nazwę hosta z plikiem .htaccess który jest powszechnie przyjętego przez wszystkich:

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] 
Powiązane problemy