J'espère que c'est une simple réponse OUI ou NON (veuillez préciser pourquoi)
Q1: Est-ce important dans quel ordre les règles sont placées dans htaccess? Comme ce sont des éléments complètement séparés: par exemple
Q2: Si oui, est-ce que j'applique la bonne commande? afin d'accélérer le moteur htacces et de ne pas le surcharger avec des règles inutiles?
Q3: tous les conseils sur ce qu'il faut désactiver / ajouter ici sont les bienvenus +1 +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 /
.htaccess
fichier de l'OP . En bref, les directives de différents modules (et dans différents conteneurs ) s'exécutent indépendamment et dans un ordre prédéfini, quel que soit leur ordre apparent dans le fichier de configuration.Je ne peux pas parler de la façon dont l'ordre des
<files>
vs<Rewrite>
, par exemple, affecte les performances. J'essaie de le découvrir moi-même. Je n'ai pas pu trouver d'informations à ce sujet, donc cela n'a peut-être pas d'importance ??Cependant, je voudrais souligner qu'entre
Rewrite
vsRedirect
(etRedirectMatch
), l'ordre d'exécution peut ne pas être dans l'ordre indiqué, bien que ce soit souvent ce à quoi les gens peuvent s'attendre.Plus précisément, les modules
mod_rewrite
etmod_alias
sont traités / exécutés indépendamment, et dans cet ordre.Rewrite
) sont exécutées (dans l'ordre où elles sont répertoriées).Redirect
etRedirectMatch
) sont exécutées dans l'ordre dans lequel elles sont répertoriées dans le fichier.Ainsi, même si a
Redirect
procède à aRewrite
, la redirection ne sera traitée qu'après le traitement de toutes les réécritures.Une façon de garder le fichier «lisible» si vous avez à la fois des redirections et des réécritures, est de ne pas utiliser du
mod_alias
tout le module. Au lieu de cela, utilisez uniquementmod_rewrite
. Réécrire avec le drapeau [R] le transforme essentiellement en réécriture.La réponse de ce webmaster montre comment.
Maintenant, toutes les directives seront exécutées dans l'ordre dans lequel elles apparaissent dans le fichier, donc il n'y a pas de mauvaises surprises, ni de confusion sur l'ordre d'exécution. Alternativement, vous pouvez déplacer physiquement toutes les directives
Redirect
etRedirectMatch
au "bas" du fichier, afin de vous rappeler qu'elles ne seront exécutées qu'après leRewrite
s de toute façon.Voici quelques bonnes réponses StackExchange qui se sont éclairées sur ce point:
Pour le reste, je n'ai pas pu trouver d'informations sur les performances entre le placement
files
avant ou aprèsrewrite
s, par exemple. Le seul conseil basé sur les performances que j'ai trouvé, c'est que si l'on a accès aux fichiers de configuration du serveur, il est préférable de déplacer autant que possible du fichier .htaccess vers le fichier de configuration et de désactiver complètement les fichiers .htaccess (ou spécifier des répertoires spécifiques où les fichiers .htaccess doivent être lus).La logique est que les règles placées dans le fichier de configuration n'ont besoin d'être lues qu'une seule fois. Si le traitement htaccess est activé, pour chaque demande, chaque répertoire du serveur (au niveau ou supérieur au répertoire demandé) doit être recherché pour les fichiers htaccess possibles, qu'ils existent ou non. Et s'ils le font, chacun doit être relu.
la source
J'ai la même préoccupation affichée, mais c'est une perspective de site d'administration du serveur qui leur permet de redémarrer apache après un changement de configuration du serveur apache.
Jusqu'à présent, la meilleure réponse que j'ai reçue est de lister d'abord les directives liées aux fichiers.
Cela a un sens lié au besoin d'Apache de gérer les répertoires et les instructions htaccess dans chaque répertoire.
Donc, listez d'abord les directives liées aux fichiers, puis les blocs évidents pour terminer le processus apache htaccess dans l'ordre de l'évidence.
Solution possible pour optimiser les requêtes: - corrections liées à l'url de la requête - restrictions liées à l'annuaire - restrictions liées à l'index - restrictions liées aux fichiers - restrictions proxy <- tuer tout - agent utilisateur vide <- tuer tout ... la liste est un plaisir sans fin
Ma préoccupation concernait la séquence des directives. Par exemple, dois-je définir les directives Index, File et Header avant RewriteConds?
la source