Назад | Перейти на главную страницу

Перенаправить все URL-адреса с http на https (с 301), за исключением нескольких [дубликатов]

Я пытаюсь 301 перенаправить все URL-адреса с http:// к https://, используя .htaccess. Следует исключить некоторые динамически генерируемые URL-адреса.

Пример некоторых URL-адресов, которые я делаю не хотите перенаправить:

example.com/tt.php?xxx (where xxx can be any number)
example.com/top/xxx/site/xxx (where xxx can be any number or characters)

Сейчас мой .htaccess выглядит так:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Как я могу «исключить» свои динамические URL?

Прямо сейчас мой .htaccess выглядит так:

Если это все, что у вас есть в вашем .htaccess файл, вы можете включить некоторые исключения для URL-адресов, которые вы хотите исключить перед ваше существующее правило перенаправления.

Например:

# Prevent further processing if requesting a URL of the form
# example.com/tt.php?xxx (where xxx can be any number)
RewriteCond %{QUERY_STRING} ^\d+$
RewriteRule ^tt\.php$ - [L]

# Prevent further processing if requesting a URL of the form
# example.com/top/xxx/site/xxx (where xxx can be any number or characters)
RewriteRule ^top/[^/]+/site/ - [L]

Поместив указанные выше «исключения» первый тогда любые последующие директивы (т. е. перенаправление) будут пропущены.


ОБНОВИТЬ: Если бы у вас были другие директивы в вашем .htaccess файл, который по-прежнему должен применяться к этим URL-адресам, вы можете вместо этого добавить дополнительные условия к существующему правилу перенаправления.

Например:

RewriteCond %{THE_REQUEST} !^[A-Z]{3,6}\s/tt\.php\?\d+\sHTTP
RewriteCond %{REQUEST_URI} !^/top/[^/]+/site/

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Обратите внимание, что первые два условия имеют ! префикс на CondPattern чтобы отрицать его смысл. Итак, условие будет успешным, только если регулярное выражение не соответствие.

Обратите внимание, что вместо использования двух директив (RewriteCond и RewriteRule), как я сделал в первом примере, чтобы сопоставить URL /tt.php?xxx Я объединил это в одно правило и сравнил с THE_REQUEST - это упрощает логику этого правила.

THE_REQUEST Переменная сервера содержит первую строку HTTP-запроса.