Перенаправить все 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-адреса?

3
задан 2 October 2019 в 18:17
1 ответ

Сейчас мой .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-запроса.

2
ответ дан 3 December 2019 в 06:53

Теги

Похожие вопросы