2017-10-12 4 views
1

J'ai la structure suivante:Masquer l'accès du public aux annuaires, mais permettent par RewriteRule

public_html/ 
    hidden_directory/ 
    sub_folder/ 
     sample_file.txt 
     other_file.txt 
    another_folder/ 
     another_file.txt 

Mon objectif final est d'avoir le contenu de hidden_directory visible que par réoriente. Ma première tentative pour les mettre en dehors du public_html a échoué. Alors j'ai essayé la structure que vous voyez ci-dessus avec un Redirect comme

RewriteRule ^sub/(.*) hidden_directory/sub_folder/$1 [L] 

pour accéder par:

http://mysite/sub/sample_file.txt 

Et cela a très bien fonctionné me donner le contenu que je voulais de l'emplacement du fichier et l'URL que je voulais. Mais je ne l'ai pas aimé que les dossiers étaient également disponibles à partir de:

http://mysite/hidden_directory/sub_folder/sample_file.txt 

J'ai fait une

deny from all 

dans hidden_directory, et qui ont arrêté un accès direct comme je voulais, mais il a aussi brisé les réécritures.

Y at-il une solution htaccess que je pourrais avoir ces fichiers dans un dossier pas directement accessible mais encore accessible avec des réécritures?

Répondre

1

Y at-il une solution htaccess que je pourrais avoir ces fichiers dans un dossier non directement accessible mais encore accessible avec des réécritures?

Oui utiliser une règle basée sur la variable THE_REQUEST pour bloquer l'accès direct à hidden_directory:

RewriteEngine On 

# block direct access to a given path 
RewriteCond %{THE_REQUEST} \s/+hidden_directory[/?\s] [NC] 
RewriteRule^- [F] 

RewriteRule ^sub/(.*)$ hidden_directory/sub_folder/$1 [L,NC] 

variables THE_REQUEST représente la demande initiale reçue par Apache à partir de votre navigateur et ne soit pas écrasé après l'exécution de certains réécrire les règles. La valeur d'exemple de cette variable est GET /index.php?id=123 HTTP/1.1

+1

C'est fait! Merci! –