Перед проверкой не забывать сбрасывать кэш браузера или использовать какой-нибудь онлайн сервис например, bertal.ru.
Возможно сам wordpress делает редирект на адрес без / и .htaccess тут не поможет.
RewriteRule ^([^.]*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L]
Заменить (.+)/$ на ^(.+\.html)/$
Исключить несколько файлов можно без if
location = /robots.txt { } location = /wmail_1da14533d58e4654646546546d6ff9085fcafbab1500.html { } location = /yandex_83b7222965464512ddaf21.html { } location = /google4da41e65465494c6c7c0df.html { } location / { return 301 https://newsite.ru$request_uri; }
Всё верно "%3F" это код вопросительного знака.
В RewriteRule c шаблоном сопоставляется строка уже в нормализованном виде, т.е после преобразования относительных элементов пути ".", ".." и декодирования текста, заданного в виде %XX.
Флаг [L] останавливает текущую итерацию обработки запроса, а mod_rewrite запускает обработку запроса снова и снова, до тех пор, пока он не перестанет меняться.
Перед началом очередной итерации обработки запроса снова происходит преобразование "." ".." и декодирование %XX.
https://habr.com/en/company/sprinthost/blog/129560/
RewriteCond %{QUERY_STRING} ^(categoryID=\d+)$ RewriteRule ^(index\.php)$ /$1\%3F%1? [L]
Или
RewriteCond %{REQUEST_FILENAME}?%{QUERY_STRING} -f RewriteRule (.+) /$1\%3F%{QUERY_STRING}? [L]
if ($request_uri ~ "^/\?q=&p=(\d+)") { return 301 /page/$1; }
После внутреннего перенаправления на /404.html этот адрес снова проверяется правилами mod_rewrite.
ErrorDocument 404 /404.html RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{THE_REQUEST} ^GET.+\? RewriteCond %{REQUEST_URI} !^/razdel/skript\.php RewriteRule ^ - [R=404,L]
Или так
ErrorDocument 404 /404.html RewriteCond %{THE_REQUEST} ^GET.+\? RewriteCond %{REQUEST_URI} !^/razdel/skript\.php RewriteCond %{REQUEST_URI} !^/404\.html RewriteRule ^ - [R=404,L]
Тогда вместо
RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^.
Ставить
RewriteCond %{THE_REQUEST} "GET \S+\?"
RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^(.+) [NC] RewriteRule ^ - [R=404,L,NC]
RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^. RewriteCond %{REQUEST_URI} !^/razdel/skript\.php RewriteRule ^ - [R=404,L]
RewriteCond %{THE_REQUEST} "GET \S+\?" RewriteRule !^razdel/skript\.php - [R=404,L]