Espero que seja uma resposta SIM ou NÃO simples (especifique o motivo)
Q1: importa em que ordem as regras são colocadas no htaccess? Como são itens completamente separados: por exemplo
P2: Se sim, estou aplicando a ordem certa? para acelerar o mecanismo htacces e não sobrecarregá-lo com regras desnecessárias?
Q3: quaisquer dicas sobre o que desativar / adicionar aqui são bem-vindas +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
arquivo do OP . Em resumo, as diretivas de diferentes módulos (e em diferentes contêineres ) são executadas independentemente e em uma ordem predefinida, independentemente da ordem aparente no arquivo de configuração.Não posso falar sobre como a ordem dos
<files>
vs<Rewrite>
, por exemplo, afeta o desempenho. Estou tentando descobrir isso sozinho. Não consegui encontrar nenhuma informação sobre isso, então possivelmente isso não importa?No entanto, gostaria de salientar que entre
Rewrite
vsRedirect
(eRedirectMatch
), a ordem de execução pode não estar na ordem listada, embora isso seja frequentemente o que as pessoas podem esperar.Especificamente, os módulos
mod_rewrite
emod_alias
são processados / executados de forma independente e em essa ordem.Rewrite
) são executadas (na ordem em que são listadas).Redirect
eRedirectMatch
) são executadas na ordem em que estão listadas no arquivo.Portanto, mesmo que a
Redirect
prossiga aRewrite
, o redirecionamento será processado somente após todas as regravações terem sido processadas.Uma maneira de manter o arquivo "legível" se você tiver redirecionamentos e reescrições, é não usar o
mod_alias
módulo. Em vez disso, use apenasmod_rewrite
. Reescrever com o sinalizador [R] basicamente o transforma em uma reescrita.A resposta deste webmaster mostra como.
Agora, todas as diretivas serão executadas na ordem em que aparecem no arquivo, para que não haja surpresas desagradáveis ou confusão sobre a ordem de execução. Como alternativa, você pode realocar fisicamente todas as diretivas
Redirect
eRedirectMatch
para a "parte inferior" do arquivo, para se lembrar de que elas não serão executadas até depois doRewrite
s de qualquer maneira.Aqui estão algumas boas respostas do StackExchange que esclareceram sobre esse ponto:
Quanto ao resto, não consegui encontrar nenhuma informação sobre desempenho entre colocar
files
antes ou depois derewrite
s, por exemplo. O único conselho baseado em desempenho que encontrei é que, se alguém tiver acesso aos arquivos de configuração do servidor, é melhor mover o máximo possível do arquivo .htaccess para o arquivo de configuração e desabilitar os arquivos .htaccess por completo (ou especificar diretórios específicos em que arquivos .htaccess devem ser lidos).A lógica é que as regras colocadas no arquivo de configuração precisam ser lidas apenas uma vez. Se o processamento do htaccess estiver ativado, para cada solicitação, todos os diretórios do servidor (iguais ou superiores ao diretório solicitado) deverão ser pesquisados em busca de possíveis arquivos htaccess, existindo ou não. E se o fizerem, cada um deve ser lido novamente.
fonte
Tenho a mesma preocupação, mas esta é uma perspectiva do site de administração do servidor que permite reiniciar o apache após uma alteração na configuração do servidor apache.
Até agora, a melhor resposta que recebi é listar primeiro as diretivas relacionadas a arquivos.
Isso faz sentido relacionado à necessidade do apache de gerenciar diretórios e instruções htaccess em cada diretório.
Portanto, liste primeiro as diretivas relacionadas ao arquivo e depois os blocos óbvios para finalizar o processo apache htaccess na ordem do óbvio.
Solução possível para otimizar as solicitações: - solicitar correções relacionadas a URL - restrições relacionadas ao diretório - restrições relacionadas ao índice - restrições relacionadas a arquivos - restrições de proxy <- matar tudo - agente de usuário vazio <- matar tudo ... a lista é divertida sem fim
Minha preocupação estava relacionada à sequência de diretrizes. Por exemplo, devo definir diretivas de índice, arquivo e cabeçalho antes de RewriteConds?
fonte