WordPress как на ладони
rgbcode is looking for WordPress developers. eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Как заставить WordPress игнорировать GET-параметры при кешировании страниц?

Ситуация: есть сайт на WordPress, небольшой статейник. Грузится не очень быстро (500-600мс), с кешом значения гораздо лучше (20-30мс). Проблема возникает в момент захода на страницу вида example.com/page?foo=12345 - страницы с GET-параметрами хоть и кешируются большинством популярных плагинов, тем не менее, каждая из них считается уникальной, хотя реально страница на GET-параметры не реагирует. Возникло опасение, что злоумышленник может заДОСить сайт запросами вида ?foo=1 + ?foo=2 + ?foo=3 и т.д.

Вопрос - как лучше этого избежать? Дропать GET-параметры, найти какой-то чуть менее популярный плагин кеширования, который это предусмотрел, использовать объектный кеш, etc.?

Заметки к вопросу:
mi13 3 месяца назад

surge игнорит гет параметры по умолчанию.

0
LeTraceurSnork
3 месяца назад 6
  • 0
    Kama9743

    Если вы используете такие плагины как WP Super Cache или W3 Total Cache, вы можете настроить их так, чтобы они игнорировали определенные GET параметры или параметры по умолчанию.

    В WP Super Cache: перейдите в "Advanced" и в разделе "Accepted Filenames & Rejected URIs", добавьте строку ?foo=* в поле "Strings to reject" чтобы игнорировать GET параметры.

    В W3 Total Cache: это немного сложнее: перейдите в раздел “Performance” > “Page Cache” и добавьте в поле "Never cache the following pages" значение ?foo=* .

    Дикое решение, но может оно вам подойдет

    Если вы хотите полностью игнорировать все GET-запросы, вы можете добавить следующий фильтр в файл functions.php вашей темы:

    add_filter( 'do_parse_request', 'ignore_query_vars', 10, 1 );
    
    function ignore_query_vars( $ignore ) {
    	if ( $_SERVER['QUERY_STRING'] ) {
    		$_SERVER['REQUEST_URI'] = strtok( $_SERVER['REQUEST_URI'], '?' );
    		$_SERVER['QUERY_STRING'] = '';
    	}
    
    	return $ignore;
    }

    Тем не менее, важно понимать что применять данное решение следует осторожно и только если вы абсолютно уверены, что GET-параметры не используются на вашем сайте (включая плагины и админку).

    --

    Более надежное решение - использование реверс-прокси, например NGINX, для кеширования содержимого. Это позволит вам контролировать свое кеширование на уровне сервера и более гибко управлять параметрами URL. Но подобное решение требует более высокого уровня технических навыков и возможно недоступно при использовании шаред хостинга.

    Возникло опасение, что злоумышленник может заДОСить сайт запросами вида ?foo=1 + ?foo=2 + ?foo=3 и т.д.

    Если кто-то захочет задосить, то спсобов очень много и решать проблему доса нужно будет уже как-то подругому, например проксировать запросы через Claudflare или подобные CDN. Это уже другая история...

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация