У меня есть компьютер Windows 7 , на котором установлен файл ucrtbase.dll
Universal C Runtime. в версии 10.0.10586.1412
.
Однако последнее официальное обновление MS Update, которое я могу найти для исправления этого файла для Windows 7, - это KB3118401, которое содержит этот файл в версии 10.0.10586.9
.
На этом компьютере с Windows-7, как я могу узнать, в каком обновлении KB установлена эта конкретная версия ucrtbase.dll
?
Я хотел бы решить эту проблему в общем виде , потому что у нас время от времени возникают проблемы с системными DLL-библиотеками Windows: в нашем отделе разработки у нас есть 5 разных версий Visual Studio, и поэтому время от времени случалось, что у одного разработчика была более новая версия некоторой DLL-библиотеки System32, и мы даже не были уверены откуда оно пришло.
Что я пробовал:
% WINDIR% \ WindowsUpdate.log
- отметки времени начинаются после предполагаемой установки amd64_microsoft-windows-ucrt_31bf3856ad364e35_6.1.7601.23303_none_0a7a73e149361a18
- Я не нашел, как это может помочь. , я хотел бы заблокировать все запросы, начинающиеся с / search? Q =
, поскольку они создают нежелательную нагрузку на мой сервер.
После этого вопроса https://stackoverflow.com/questions/4640807/how-to-block-bot-requests-to-urls-that-match-a -common-pattern-in-apache , я пробовал следующий код:
<Location />
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/search?q=[^/] [NC]
RewriteRule ^.*$ - [F,L]
</Location>
, но он блокирует слишком много URL-адресов (как и все, что начинается с поиска)
Я пробовал разные варианты, но они не работали. Каким будет правильный синтаксис?
но он блокирует слишком много urls (как и все, что начинается с поиска)
Код, который вы разместили, не сделает этого? На самом деле, код, который вы разместили, вряд ли будет что-то блокировать, если только в URL исходного запроса не был закодирован ?
(т.е. %3F
)?
Однако, чтобы соответствовать строке запроса (т.е. q=
), тогда вам нужно найти совпадение с переменной сервера QUERY_STRING
. Переменная Apache сервера REQUEST_URI
содержит только путь URL (без строки запроса).
Таким образом, чтобы заблокировать все запросы, которые начинаются /поиск?q=
, необходимо следующее:
RewriteCond %{QUERY_STRING} ^q=
RewriteRule ^/?search$ - [F]
Это гарантирует, что путь URL совпадает с /поиск
, а строка запроса начинается со значения q=
. Флаг
Флаг NC
не требуется, если только в строке запроса не должно быть также совпадений с Q=
.
Флаг L
не требуется с флагом F
, как это подразумевается.
UDPATE: Я поместил эти директивы непосредственно в конфигурацию сервера, потому что у меня на этом сервере много виртуальных хостов (сайтов), и я хотел бы, чтобы это правило применялось ко всем.
Вероятно, это ваша проблема. Директивы mod_rewrite в конфигурационном файле сервера по умолчанию переопределяются виртуальным хостом и фактически игнорируются. vHosts не унаследуют директивы mod_rewrite от конфигурационного сервера, если только вы специально не включите наследование mod_rewrite, что вы обычно делаете из контейнера vhost. Однако, в Apache 2.4.8+ это можно сделать в главном конфигурационном файле сервера (server context). Например:
RewriteOptions InheritDownBefore
InheritDownBefore
гарантирует, что директивы в конфигурационном сервере выполняются до директив в vhost.