Pentru a preveni procesarea oricăror directive mod_rewrite pentru cereri în afara rădăcinii documentului, plasați următoarea regulă în partea de sus a fișierului:
# Preveniți procesarea ulterioară dacă cererea se află în afara directorului rădăcină
RewriteRule / - [L]
Cele de mai sus afirmă practic că pentru orice cale URL solicitată care conține o bară oblică, atunci opriți-vă aici. (Acest lucru va prinde și cererile care se termină cu o bară oblică - este o problemă?)
Alternativ, puteți face expresia regex pentru cele două reguli existente mai precisă, astfel încât să se aplice numai cererilor din directorul rădăcină.
De exemplu:
# Aplicați reguli numai cererilor din directorul rădăcină
RewriteCond %{REQUEST_FILENAME} -s [SAU]
RewriteCond %{REQUEST_FILENAME} -l [SAU]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^[^/]+$ - [L]
RewriteRule ^([^/]*)$ index.php?var=$1 [QSA,L]
The PT
steag de pe prima regulă nu este necesar. Și nici grupul de captură din prima regulă nu este necesar. Puncte literale în substituţie șirul nu trebuie să fie scapat de bară oblică inversă.
NB: De asemenea, acest lucru nu va procesa cererile care Sfârşit cu o tăietură.
Totuși, dacă acestea sunt singurele tale reguli care au legătură cu asta, atunci nu le faci nevoie două reguli, doar una este necesară, cu condiția ca cererile către rădăcina documentului în sine să lipsească var
parametru URL. De exemplu:
DirectoryIndex index.php
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?var=$1 [QSA,L]
Rețineți că logica conditii este inversat.
După cum am menționat, cererile pentru directorul rădăcină în sine vor ajunge la index.php
(prin mod_dir), nu index.php?var=
.