jkm

Рейтинг
120
Регистрация
20.02.2014

Исключить несколько файлов можно без if


location = /robots.txt { }
location = /wmail_1da14533d58e4654646546546d6ff9085fcafbab1500.html { }
location = /yandex_83b7222965464512ddaf21.html { }
location = /google4da41e65465494c6c7c0df.html { }
location / {
return 301 https://newsite.ru$request_uri;
}
Gerga:
Я понял. "%3F" - это код вопросительного знака. Не используется знак "?", чтобы не было воспринято как передача GET-параметров в исполняемый php файл?

А когда происходит замена "%3F" на вопросительный знак?

Всё верно "%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]
Васо Вчеразаши:
запрос без параметров, но с символом "?" на конце? Например site.ru/? или site.ru/razdel/ctranica?

Тогда вместо


RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} ^.

Ставить

RewriteCond %{THE_REQUEST} "GET \S+\?"
Васо Вчеразаши:
Всех с наступившим!
Нужно было сделать, чтобы по ссылке с параметрами сервер отдавал 404. В поддержке хостинга посоветовали прописать в .htaccess так:
RewriteCond %{REQUEST_METHOD} GET

RewriteCond %{QUERY_STRING} ^(.+) [NC]
RewriteRule ^ - [R=404,L,NC]

Все работает, но... Нужно чтобы GET запрос типа https://site.ru/razdel/skript.php?j=параметры проходил. То есть как добавить в исключения вышеприведенного кода шаблон типа https://site.ru/razdel/skript.php.* где .* - любое количество любых символов?


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]
lcc7:
без www - на www ни один из трех способов не подходит

А если ставить редирект в начало файла?

Как настраивать редирект на 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]
Всего: 746