Исключить несколько файлов можно без 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]
А если ставить редирект в начало файла?
Как настраивать редирект на https обычно можно найти в справке на сайте своего хостера.
RewriteCond %{HTTPS} !=on [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule (.*) https://www.goagetaway.com/$1 [R=301,L]
В зависимости от настроек сервера вместо RewriteCond %{HTTPS} !=on могут быть другие варианты проверки https.
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
Options +FollowSymLinks AddDefaultCharset UTF-8 #Обработка php в html, htm AddType application/x-httpd-php .html .htm AddType text/x-component .htc RewriteEngine on RewriteBase / RewriteCond %{THE_REQUEST} ([^?\s]*?)(/index)?\.html RewriteRule (.*) https://mysite.ru%1/ [R=301,L] # HTTPS SetEnvIf X-Forwarded-Proto https SERVER_PORT=443 SetEnvIf X-Forwarded-Proto https HTTPS=on RewriteCond %{HTTP:HTTPS} !=on [NC,OR] RewriteCond %{HTTP_HOST} ^www\.mysite\.ru$ [NC] RewriteRule ^(.*)$ https://mysite.ru/$1 [R=301,L] RewriteCond %{DOCUMENT_ROOT}/$1.html -f RewriteRule ^(.+)/$ $1.html [L]