Puncte:1

RewriteRule se aplică tuturor fișierelor în timpul listării directoarelor

drapel vn

Cu Opțiuni Indexuri și LogLevel rescrie: trace6 Văd că regula mea de rescrire este aplicată tuturor fișierelor din directorul listat. Intră chiar în subdirectoare și caută index.html. Acest lucru este rău pentru performanță. Este chiar necesar acest lucru? Cum să-l dezactivezi? În configurația actuală am un „prg” Rescrie harta iar acest program primește toate fișierele listate pe STDIN-ul său.

Problema este reproductibilă cu acest minim de configurație:

Mediu inconjurator:

  • OpenSUSE Tumbleweed
  • apache2-2.4.51-1.1.x86_64

Configurații:

  • /etc/apache2/conf.d/test.conf (vezi mai jos httpd.conf complet)

    LoadModule rewrite_module /usr/lib64/apache2/mod_rewrite.so
    Rescrierea depanării LogLevel:trace6
    <Directorul „/srv/www/htdocs/test”>
        Opțiuni Indexuri FollowSymLinks
        RewriteEngine activat
        RewriteRule Badrule nu se întâmplă niciodată
    </Director>
    

Comenzi:

mkdir /srv/www/htdocs/test
atingeți /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzz{a..z}
systemctl reporniți apache2
coada -F /var/log/apache2/error_log &
curl -s -o /dev/null http://localhost/test/

Ieșire:

[rid#556dab9a2060/initial] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/ ->
[rid#556dab9a2060/initial] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „”
[rid#556dab9a2060/initial] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/index.html -> index.html
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „index.html”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/index.html
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/index.html.var -> index.html.var
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „index.html.var”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/index.html.var
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip prefix per dir: /srv/www/htdocs/test/HEADER.html -> HEADER.html
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „HEADER.html”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/HEADER.html
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzzza -> zzzzzzzzzzzzzzzzzzzzzza
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „zzzzzzzzzzzzzzzzzzzzzzza”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzza
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzzzb -> zzzzzzzzzzzzzzzzzzzzzzzz
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „zzzzzzzzzzzzzzzzzzzzzzb”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzzb
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] strip per-dir prefix: /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzzzc -> zzzzzzzzzzzzzzzzzzzzzzzc
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] se aplică modelul „badrule” la uri „zzzzzzzzzzzzzzzzzzzzzc”
[rid#556dab9a8090/subreq] [perdir /srv/www/htdocs/test/] trece prin /srv/www/htdocs/test/zzzzzzzzzzzzzzzzzzzzzc
...

Deplin httpd.conf:

# sudo -u nobody /sbin/httpd -d /etc/httpd-test -f /etc/httpd-test/httpd.conf -DFOREGROUND
#
# Următoarele nu sunt necesare pe SUSE
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# Următoarele nu sunt necesare pe SUSE
LoadModule unixd_module modules/mod_unixd.so

LoadModule authz_core_module modules/mod_authz_core.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule rewrite_module modules/mod_rewrite.so

ErrorLog „|/bin/cat”
Rescrierea depanării LogLevel:trace6
PidFile /dev/shm/httpd-test.pid

ServerName gazdă locală

Ascultă 8080

DocumentRoot „/srv/www/htdocs”

<Directorul „/srv/www/htdocs/test”>
    Solicitați toate acordate
    Opțiuni Indexuri FollowSymLinks
    RewriteEngine activat
    RewriteRule Badrule nu se întâmplă niciodată
</Director>
Puncte:0
drapel kz

Cu o listă de director generată de mod_autoindex, este declanșată o subcerere internă pentru toate elementele listate din director. Acest lucru este indicat în jurnal cu subreq (spre deosebire de iniţială).

Puteți preveni RewriteRule directivă fiind procesată pentru subcereri prin folosirea NS (nosubreq) steag. De exemplu:

RewriteRule Badrule neverhappen [NS]

Alternativ, puteți muta RewriteRule directivă din <Directory> container și să-l au direct sub <VirtualHost> in schimb. Rețineți că directiva ar putea trebuie schimbat ușor, deoarece acum funcționează într-un alt mod context (virtualhost spre deosebire de director) și procesate anterior. Acest lucru împiedică în mod natural procesarea directivei pentru fiecare articol din lista de director (fără a fi necesar să includă NS steag). Cu toate acestea, poate fi apelat pentru alte subcereri, cum ar fi apeluri pentru HeaderName și ReadmeName fișierele asociate listei de directoare (dacă aceste directive sunt setate, indiferent dacă fișierele există sau nu), așa că puteți alege în continuare să includeți NS semnalați aceste directive dacă aceasta este o problemă.

Intră chiar în subdirectoare și caută index.html

Acest lucru este cauzat de testarea mod_dir pentru DirectoryIndex documente. Dacă nu este necesar, atunci poate fi dezactivat:

DirectoryIndex dezactivat

Referinţă:

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.