La materia è in quale ordine vengono inserite in htaccess?


9

Spero che questa sia una semplice risposta SÌ o NO (specificare perché)

D1: La materia è in ordine in cui le regole sono inserite in htaccess? Dal momento che sono elementi completamente separati: ad esempio

Q2: Se sì, sto applicando il giusto ordine? per accelerare il motore htacces e non sovraccaricarlo con regole inutili?

D3: eventuali suggerimenti su cosa disabilitare / aggiungere qui sono ben accetti +1!


# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /

#####################################################

<IfModule mod_headers.c>
    ExpiresActive On
    ExpiresDefault M172800
    Header unset ETag
    FileETag None
    Header unset Pragma

    ##### STATIC FILES
    <FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
        ExpiresDefault M1209600
        Header set Cache-Control "public, max-age=1209600"
    </FilesMatch>

    ##### DYNAMIC PAGES
    <FilesMatch "\\.(php)$">
        ExpiresDefault M604800
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

#####################################################

#  /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$  /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

####################################################

# NO WWW   http://www. becomes always http://
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz

##############################################################

ErrorDocument 500 /
ErrorDocument 404 /

Risposte:


10

Bene, i file .htaccess usano lo stesso formato del normale file di configurazione di Apache, quindi si applicano le stesse regole.

La maggior parte delle impostazioni di configurazione non dipende dall'ordine, ma alcune dipendono dall'impostazione.

RewriteRulee RewriteCondad esempio sono sensibili all'ordine, quindi in quel caso la risposta è SÌ.

Vedi ad es

http://wiki.apache.org/httpd/RewriteRule

per una spiegazione dell'ordine in cui questi vengono valutati.


4

Importa. Citando dalla documentazione per RewriteRule :

L'ordine in cui sono definite queste regole è importante: questo è l'ordine in cui verranno applicate in fase di esecuzione.


1
All'interno di mod_rewrite, importa - sì. Tuttavia, l'OP non si rivolge in modo specifico a mod_rewrite e ci sono molte altre direttive da altri moduli nel .htaccessfile dell'OP . In breve, le direttive di moduli diversi (e in contenitori diversi ) vengono eseguite in modo indipendente e in un ordine predefinito, indipendentemente dal loro ordine apparente nel file di configurazione.
MrWhite,

1

Non posso parlare di come l'ordine di <files>vs <Rewrite>, ad esempio, influenzi le prestazioni. Sto cercando di scoprirlo da solo. Non sono stato in grado di trovare informazioni su questo, quindi forse non importa ??

Tuttavia, vorrei sottolineare che tra Rewritevs Redirect(e RedirectMatch), l'ordine di esecuzione potrebbe non essere nell'ordine elencato, anche se questo è spesso quello che le persone possono aspettarsi.
In particolare, i moduli mod_rewritee mod_aliasvengono elaborati / eseguiti in modo indipendente, e in che ordine.

  1. Tutte le direttive mod_rewrite ( Rewrite) vengono eseguite (nell'ordine in cui sono elencate).
  2. ALLORA tutte le direttive mod_alias ( Redirecte RedirectMatch) sono eseguite nell'ordine in cui sono elencate nel file.

Pertanto, anche se un Redirectprocede a Rewrite, il reindirizzamento verrà elaborato solo dopo che tutte le riscritture sono state elaborate.

Un modo per mantenere il file "leggibile" se si hanno sia reindirizzamenti che riscritture è di non utilizzare affatto il mod_aliasmodulo. Invece, usa solo mod_rewrite. Riscrivere con il flag [R] essenzialmente lo trasforma in una riscrittura.
La risposta di questo webmaster mostra come.

Ora, tutte le direttive saranno eseguite nell'ordine in cui compaiono nel file, quindi non ci sono brutte sorprese o confusione sull'ordine di esecuzione. In alternativa, è possibile spostare fisicamente tutte le direttive Redirecte RedirectMatchnella "parte inferiore" del file, in modo da ricordare a se stessi che non verranno eseguite fino a dopo la Rewrites.

Ecco alcune buone risposte StackExchange che hanno chiarito a questo punto:

Per il resto, non sono stato in grado di trovare alcuna informazione sulle prestazioni tra il posizionamento filesprima o dopo rewrite, ad esempio. L'unico consiglio basato sulle prestazioni che ho trovato è che se si ha accesso ai file di configurazione del server, è meglio spostare il più possibile dal file .htaccess al file di configurazione e disabilitare del tutto i file .htaccess (o specificare directory specifiche in cui I file .htaccess devono essere letti).

La logica è che le regole inserite nel file di configurazione devono essere lette una sola volta. Se l'elaborazione htaccess è attivata, per ogni richiesta, ogni directory del server (uguale o superiore alla directory richiesta) deve essere cercata per possibili file htaccess, che esistano o meno. E se lo fanno, ognuno deve essere letto di nuovo.


-1

Ho pubblicato la stessa preoccupazione, ma questa è una prospettiva del sito di amministrazione del server che consente loro di riavviare apache dopo una modifica della configurazione del server apache.

Finora, la migliore risposta che ho ricevuto è elencare prima le direttive relative ai file.

Ciò ha senso in relazione alla necessità di apache di gestire directory e istruzioni htaccess in ogni directory.

Quindi, elenca prima le direttive relative ai file, quindi i blocchi ovvi per terminare il processo di htaccess di apache in ordine di ovvio.

Possibile soluzione per ottimizzare le richieste: - richiedere correzioni relative all'URL - Restrizioni relative alla directory - Restrizioni relative all'indice - Restrizioni relative al file - Restrizioni proxy <- kill all - svuota user agent <- kill all ... l'elenco è infinito divertimento

La mia preoccupazione riguardava la sequenza delle direttive. Ad esempio, devo impostare le direttive Index, file e Header prima di RewriteConds?


footnote: RewriteRule pattern sostituzione [flags] Non risponde a questa ovvia domanda sull'elaborazione dell'applicazione!
Testbench
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.