Вчера я работал над сайтом WordPress, в основном в области оптимизации веб-производительности (на виртуальном хостинге).
В какой-то момент я заметил, что мой .htaccess
файл имел избыточные, возможно, противоречивые директивы:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# From the HTML5 Boilerplate
# https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess
# Apache Server Configs v2.0.0 | MIT License
# https://github.com/h5bp/server-configs-apache
...
# BEGIN WordPress
RewriteEngine on
#
# Unless you have set a different RewriteBase preceding this
# point, you may delete or comment-out the following
# RewriteBase directive:
RewriteBase /
#
# if request is for image, css, or js file
RewriteRule \.(gif|jpe?g|css|js|ico)$ - [L,NC]
# or if URL resolves to existing file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# or if URL resolves to existing directory
RewriteCond %{REQUEST_FILENAME} -d
# then skip the rewrite to WP
RewriteRule ^ - [S=1]
# else rewrite the request to WP
RewriteRule . /index.php [L]
#
# END wordpress
Я пропустил содержание .htaccess
из HTML5 Boilerplate (многоточия), поскольку я не думаю, что этот код актуален (я почти не касаюсь его, использую в основном как есть, и он отлично работает на достаточном количестве сайтов, которые, как я знаю, не проблематичны. Для справки, Это можно найти здесь.
Поскольку .htaccess
Вверху файла были директивы WordPress по умолчанию, а внизу - «улучшенные» директивы, которые применимы?
Я искал Stackoverflow и здесь и нашел пару вопросов по этому поводу, но ничего, что действительно отвечало бы порядку, в котором обрабатываются директивы. Будет ли использоваться тот, который находится вверху файла или внизу?
Это ясный, конкретный пример, но я получаю .htaccess
файлы с дублированным кодом и избыточностью достаточно часто, чтобы более общий ответ `` практического опыта '' был бы для меня более полезным, чем что-то, что применимо только к этому экземпляру ... например, я часто заканчиваю gzip (compress
/mod_deflate
) с разными синтаксисами, и я понятия не имею, имеет ли их порядок значение или нет.
Я думаю, что этот сайт был на Apache 2.2, если это будет полезно.
Спасибо
поскольку RewriteRule . /index.php [L]
поймает каждый запрос, кроме /
, и это будет index.php
в любом случае, второй набор правил (внизу файла) никогда не будет применяться.
На самом деле это не совсем так, но все, что они сделают, это постараются пропустить index.php
перезаписать для статических файлов (чего бы все равно не было).
Вероятно, это была либо ошибка копирования и вставки, либо автоматическое управление Wordpress .htaccess
файлы (такая плохая функция) делают то, чего не следует. Удалите второй набор правил, он менее точен, менее ясен и просто сбивает с толку.