Puncte:1

Interzis pe orice, cu excepția scripturilor aflate în subfoldere

drapel gr

Vreau să interzic tot ce vine pe un anumit domeniu (de ex. exemplu.com) cu excepția unor puncte de intrare (aici, fișiere PHP) situate pe o anumită cale (de ex. exemplu.com/subfolder1/subfolder2/script.php).

Iată un fragment din configurația pe care am folosit-o în gazda mea virtuală pentru acest domeniu special. Mai primesc un 403 pentru tot.

Pentru context, folosesc Apache 2.4.41 + FPM 7.2

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /my/path
  <Directory /my/path>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
    RewriteRule . - [F,L]
  </Directory>
</VirtualHost>
Puncte:0
drapel kz
RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
RewriteRule . - [F,L]

Din cauza ancorei de la capătul firului ($) aceasta doar permite /subfolder1/subfolder2 exact (nu /subfolder1/subfolder2/script.php) și blochează orice altceva. De cand /subfolder1/subfolder2 este probabil un director fizic, apoi mod_dir va redirecționa pentru a adăuga slash-ul final, care va fi apoi blocat de această regulă. Deci da, se blochează Tot.

Trebuie să îndepărtați ancora de la capătul coardei ($) de la sfârșitul CondPattern. De exemplu:

RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2

Deși, strict vorbind, pentru a evita conflictul cu orice ar putea începe pur și simplu subdosar 2 (de exemplu. subfolder2foo.php) atunci ar trebui să utilizați un regex ca ^/subfolder1/subfolder2($|/) in schimb.

Rețineți că, dacă aceasta este singura cale URL pe care trebuie să o permiteți, nu aveți nevoie de condiție, deoarece testul trebuie efectuat în RewriteRule directivă. De exemplu:

RewriteRule !^/subfolder1/subfolder2($|/) - [F]

The L steag nu este necesar cu F steag; este subînțeles.


Alternativ, nu utilizați deloc mod_rewrite. De exemplu:

  <Directory /my/path>
    Require all denied
  </Directory>
  <Directory /my/path/subfolder1/subfolder2>
    Require all granted
  </Directory>

Acest lucru este de preferat mod_rewrite, cu excepția cazului în care aveți alte cerințe.

drapel gr
Mulțumesc mult ! Cum să nu mă gândesc la ultima ta soluție? atat de simplu :D
drapel kz
@alxsbn Din moment ce ați menționat „subfolder**s**”, nu a fost deosebit de clar dacă ultima soluție ar funcționa în afara exemplului dumneavoastră limitat. Deși ați putea folosi întotdeauna `` și un regex dacă aveți mai multe subfoldere.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.