Как комбинировать два правила в файле .htaccess?

Как указать правила перенаправления для выполнения одноэтапного редиректа с адреса <a href="https://www.site.ru//" rel="nofollow">https://www.site.ru//</a> сразу на <a href="https://site.ru/" rel="nofollow">https://site.ru/</a> в файле существующих правил редиректа?
  • 6 августа 2024 г. 14:03
Ответы на вопрос 2
Для комбинирования двух правил в файле .htaccess вы можете просто добавить новое правило после уже существующих. 

Для указания правила перенаправления с адреса "https://www.site.ru//" на "https://site.ru/", в файле .htaccess вы можете использовать следующий код:

```apache
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$
RewriteRule ^$ https://site.ru/ [L,R=301]
```

Это правило перенаправит все запросы с адреса "https://www.site.ru//" на "https://site.ru/" с кодом статуса 301 (постоянное перенаправление).

Убедитесь, что вы разместили этот код в файле .htaccess в корневой директории вашего сайта. Если в файле уже есть другие правила редиректа, просто добавьте это новое правило после них.
Примерно так: 
RewriteEngine On

# Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.site\.ru [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

# Remove trailing slash, question mark, and double slashes in URL
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&amp;
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule ^(.*)/$ https://site.ru/$1 [R=301,L]

# Remove query string if it's empty
RewriteCond %{THE_REQUEST} ^[^\\s]+\s+[^?]*?\?
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule .? https://site.ru%{REQUEST_URI}? [R=301,L]

# Remove double slashes
RewriteCond %{THE_REQUEST} //
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule .* https://site.ru/$0 [R=301,L]

# Redirect home, index, and URLs with trailing slash or query string to main page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*(home|index)(\.htm?|\.html?|\.php)?\ HTTP/
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule ^.*$ https://site.ru/ [R=301,L]


Изменения и объединение правил

1. Редирект с www на non-www теперь идет в самом начале, чтобы предотвратить промежуточные редиректы с `www`.

2. Правила для удаления конечного слэша и двойных слэшей теперь не конфликтуют, так как порядок проверки правил происходит до их выполнения, что позволяет обрабатывать дублирующие слэши и делать это в одном шаге.

3. Все условия, касающиеся административной части (`!^/administrator/`), оставлены для всех правил, чтобы избежать неправильных редиректов на одну из страниц админки.

Таким образом, теперь при нахождении URL с www или ненужными символами, будет происходить единый шаг перенаправления на правильный адрес без промежуточных этапов.
Похожие вопросы