Espero que esta sea una respuesta simple SÍ o NO (especifique por qué)
P1: ¿Importa en qué orden se colocan las reglas en htaccess? Como son elementos completamente separados: por ejemplo
P2: En caso afirmativo, ¿estoy aplicando el pedido correcto? para acelerar el motor htacces y no sobrecargarlo con reglas innecesarias?
P3: ¡cualquier consejo sobre qué deshabilitar / agregar aquí es muy bienvenido +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
archivo del OP . En resumen, las directivas de diferentes módulos (y en diferentes contenedores ) se ejecutan de forma independiente y en un orden predefinido, independientemente de su orden aparente en el archivo de configuración.No puedo hablar sobre cómo el orden de
<files>
vs<Rewrite>
, por ejemplo, afecta el rendimiento. Estoy tratando de descubrirlo yo mismo. No he podido encontrar ninguna información sobre esto, ¿entonces posiblemente no importa?Sin embargo, me gustaría señalar que entre
Rewrite
vsRedirect
(yRedirectMatch
), el orden de ejecución puede no estar en el orden indicado, aunque a menudo eso es lo que la gente puede esperar.Específicamente, los módulos
mod_rewrite
ymod_alias
se procesan / ejecutan de forma independiente, y en ese ordenRewrite
) se ejecutan (en el orden en que aparecen).Redirect
yRedirectMatch
) se ejecutan en el orden en que aparecen en el archivo.Por lo tanto, incluso si
Redirect
procede aRewrite
, el redireccionamiento se procesará solo después de que se hayan procesado todas las reescrituras.Una forma de mantener el archivo "legible" si tiene redireccionamientos y reescrituras, es no usar el
mod_alias
módulo en absoluto. En su lugar, use solomod_rewrite
. Reescribir con la bandera [R] esencialmente lo convierte en una reescritura.La respuesta de este webmaster muestra cómo.
Ahora, todas las directivas se ejecutarán en el orden en que aparecen en el archivo, por lo que no hay sorpresas desagradables ni confusión sobre el orden de ejecución. Alternativamente, podría reubicar físicamente todas las directivas
Redirect
yRedirectMatch
en la "parte inferior" del archivo, para recordar que no se ejecutarán hasta después delRewrite
s de todos modos.Aquí hay algunas buenas respuestas de StackExchange que se iluminaron hasta este punto:
En cuanto al resto, no he podido encontrar ninguna información sobre el rendimiento entre la colocación
files
antes o después derewrite
s, por ejemplo. El único consejo basado en el rendimiento que encontré es que si uno tiene acceso a los archivos de configuración del servidor, entonces es mejor moverse tanto como sea posible del archivo .htaccess al archivo de configuración, y deshabilitar los archivos .htaccess por completo (o especificar directorios específicos donde Los archivos .htaccess deben leerse).La lógica es que las reglas colocadas en el archivo de configuración solo necesitan leerse una vez. Si el procesamiento de htaccess está activado, para cada solicitud, se debe buscar en todos los directorios del servidor (en el directorio solicitado o más alto) posibles archivos de htaccess, existan o no. Y si lo hacen, cada uno debe leerse de nuevo.
fuente
Tengo la misma preocupación publicada, pero esta es una perspectiva del sitio de administración del servidor que les permite reiniciar apache después de un cambio de configuración del servidor apache.
Hasta ahora, la mejor respuesta que he recibido es enumerar primero las directivas relacionadas con archivos.
Esto tiene sentido en relación con la necesidad de Apache de administrar directorios e instrucciones htaccess en cada directorio.
Entonces, primero enumere las directivas relacionadas con el archivo, luego los bloques obvios para finalizar el proceso de acceso a apache en el orden de lo obvio.
Posible solución para optimizar las solicitudes: - solicitar correcciones relacionadas con la URL - Restricciones relacionadas con el directorio - Restricciones relacionadas con el índice - Restricciones relacionadas con el archivo - Restricciones de proxy <- Eliminar todo - Agente de usuario vacío <- Eliminar todo ... la lista es diversión sin fin
Mi preocupación relacionada con la secuencia de directivas. Por ejemplo, ¿debo establecer las directivas Index, file y Header antes de RewriteConds?
fuente