Я надеюсь, что это простой ответ ДА или НЕТ (пожалуйста, укажите почему)
В1: Имеет ли значение, в каком порядке правила размещены в htaccess? Так как они полностью разделены предметами: например
Q2: Если да, я применяю правильный заказ? чтобы ускорить двигатель htacces и не перегружать его ненужными правилами?
Q3: любые советы относительно того, что отключить / добавить здесь, с радостью приветствуем +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
файле OP есть много других директив из других модулей . Короче говоря, директивы из разных модулей (и в разных контейнерах ) выполняются независимо и в предопределенном порядке, независимо от их очевидного порядка в файле конфигурации.Я не могу говорить о том, как порядок
<files>
против<Rewrite>
, например, влияет на производительность. Я пытаюсь выяснить это сам. Я не смог найти никакой информации об этом, так что, возможно, это не имеет значения ??Тем не менее, я хотел бы отметить, что между
Rewrite
противRedirect
(иRedirectMatch
), порядок выполнения может не быть в указанном порядке, хотя это часто то , что люди могут ожидать .. Вчастности,
mod_rewrite
иmod_alias
модули обрабатываются / выполняются independantly, и в этот порядок.Rewrite
) выполняются (в порядке их перечисления).Redirect
аRedirectMatch
) выполняются в том порядке , они перечислены в файле.Таким образом, даже если a
Redirect
переходит aRewrite
, перенаправление будет обработано только после того, как все перезаписи были обработаны.Один из способов сохранить файл «читабельным», если у вас есть и перенаправление, и перезапись, - вообще не использовать
mod_alias
модуль. Вместо этого используйте толькоmod_rewrite
. Перезапись с флагом [R] по сути превращает его в перезапись.Ответ этого веб-мастера показывает, как.
Теперь все директивы будут выполняться в порядке их появления в файле, поэтому никаких неприятных сюрпризов или путаницы в порядке выполнения не будет. Кроме того , вы могли физически передислоцировать все
Redirect
иRedirectMatch
директивы «снизу» файла, с тем, чтобы напомнить себе , что они никогда не будут выполняться до тех пор , после того , какRewrite
S так или иначе.Вот несколько хороших ответов StackExchange, которые пролили свет на этот момент:
Что касается остального, я не смог найти никакой информации о производительности между размещением
files
до или послеrewrite
s, например. Единственное выступление на основе совет , который я нашел, что если один имеет доступ к файлам конфигурации сервера, то лучше двигаться как можно больше из файла .htaccess в конфигурационном файле, и отключить файлы .htaccess в целом (или указать конкретные каталоги , в которых Файлы .htaccess должны быть прочитаны).Логика заключается в том, что правила, помещенные в файл конфигурации, должны быть прочитаны только один раз. Если обработка htaccess включена, то для каждого запроса в каждом каталоге сервера (на уровне или выше запрашиваемого каталога) необходимо искать возможные файлы htaccess, независимо от того, существуют они или нет. И если они делают, каждый должен быть прочитан заново.
источник
У меня есть такая же проблема, но это перспектива сайта администратора сервера, которая позволяет им перезапустить apache после изменения конфигурации сервера apache.
Пока что лучший ответ, который я получил, - сначала перечислить директивы, связанные с файлами.
Это имеет смысл, связанный с необходимостью apache управлять каталогами и инструкциями htaccess в каждом каталоге.
Итак, сначала перечислите директивы, связанные с файлами, а затем очевидные блоки, чтобы завершить процесс apache htaccess в порядке очевидных.
Возможное решение для оптимизации запросов: - запросить исправления, связанные с URL - ограничения, связанные с каталогом - ограничения, связанные с индексом - ограничения, связанные с файлами - ограничения прокси-сервера <- kill all - пустой пользовательский агент <- kill all ... список бесконечен
Мое беспокойство связано с последовательностью директив. Например, я должен установить директивы Index, file и Header перед RewriteConds?
источник