2013-05-31 25 views
7

Ich bin ein Szenario wie folgt mit:configure erlauben nur bestimmte Domänen bestimmte Ordner zuzugreifen unter Verwendung von .htaccess

Zum Beispiel, ich habe eine Website http://www.example.com, und ich habe Setup ein paar Subdomains wie http://video.example.com, http://image1.example.com, http://image2.example.com . In der Einstellung für den virtuellen Apache verwenden sie denselben Ordner (z. B. /home/example/). (Diese beiden Domänen haben unterschiedliche Bandbreiteneinstellungen mit mod_cband).

Ich habe einen Unterordner /home/example/files/videos, ich will es nur zugänglich machen von der Sub-Domain http://video.example.com/files/videos/ aber nicht von http://www.example.com/files/videos/ oder anderem Sub-Domains.

Wie soll ich das mit einer .htaccess Datei konfigurieren?

+0

die Refe prüfen rrer ist die gebräuchlichste "Lösung" dafür - in Anführungszeichen, weil der Referrer unzuverlässig ist. – CBroe

Antwort

12

diesen Code in /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

Sie können den Host überprüfen und dann damit umgehen mit mod_rewrite eine 301-Weiterleitung in einer .htaccess-Datei zu erstellen; obwohl, wenn Sie Zugriff haben, ist es viel besser, wenn Sie dies in der httpd.conf oder eine enthaltene Konfigurationsdatei stattdessen tun.

beste Szenario

Da es so aussieht mod_cband eine andere virtualhost für jede Domain will, würden Sie Ihre Setup-Datei httpd.conf so etwas wie dieses und schließen die Rewrite-Regeln in der Config selbst. Einige Webhoster wird diese Methode tun, wo die Haupt-Account-Website ist die DocumentRoot und die anderen Seiten sind alle verschachtelt darunter Verzeichnis ist:

<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

Wenn Sie einen Hosting-Service-Provider verwenden wo, Sie haben keinen Zugriff auf die httpd.conf Dateien, und sie haben nicht die Domänen als alias der Hauptdomäne eingerichtet (jede Domäne hat einen separaten Ordner), dann würden Sie Ihre Regeln im Stamm .htaccess für www.mywebsite.com wie schreiben dies:

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] 

Die meisten Kopf

Wenn sie Aliasnamen verwenden (wo alles genau das gleiche Dokument Wurzel hat) dann müssen Sie den angeforderten Hostnamen mit einem .htaccess-Datei zu überprüfen, die von allen häufig verordnet hat:

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] 
Verwandte Themen