Как настроить редирект на HTTPS без использования www, без двойных слэшей и без добавления "index.php" в конце?

Здравствуйте! <br/> Я не очень хорошо разбираюсь в htaccess, но мне поручили от аутсорсинговой SEO-команды настроить следующие редиректы: <br/> 1) редирект с www на без www <br/> 2) редирект с http на https <br/> 3) устранение дублирующихся слэшей в URL <br/> <br/> Я уже добавил соответствующие правила, но теперь возникли цепочки редиректов. Могли бы вы помочь мне разобраться, как от них избавиться? <br/> Вот какие правила я прописал: <br/> <pre><code class="apache"># www на без www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# http -&gt; https
#RewriteCond %{HTTPS} !=on [OR]
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Исключаем все лишние слеши.
RewriteCond %{THE_REQUEST} // 
RewriteRule .* /$0 [R=301,L] 

# index.php в конце
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]</code></pre>
  • 27 сентября 2024 г. 9:23
Ответы на вопрос 2
Для настройки редиректов без использования www, без двойных слешей и без добавления "index.php" в конце, вам потребуется изменить ваши правила, чтобы они не создавали цепочки редиректов. 

Вот пример, который включает все ваши требования:

```apache
# Включаем модуль перезаписи
RewriteEngine On

# 1. Редирект с www на без www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 2. Редирект с http на https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 3. Устранение дублирующихся слэшей
RewriteCond %{REQUEST_URI} ^//(.*)$
RewriteRule ^//(.*)$ /$1 [R=301,L]

# 4. Устранение index.php в конце URL
RewriteCond %{THE_REQUEST} \s/index\.(php|html|htm)\s [NC]
RewriteRule ^(.*)/index\.(php|html|htm)$ /$1 [R=301,L]
```

### Пояснения к правилам:

1. **Редирект с www на без www**: Это правило проверяет, начинается ли хост с "www." и пересылает на тот же URL без "www".

2. **Редирект с http на https**: Условие проверяет, отключен ли HTTPS, и, если это так, перенаправляет на HTTPS версию текущего URL.

3. **Устранение дублирующихся слэшей**: Проверяется, если в запросе есть двойной слэш и удаляется один из них.

4. **Устранение index.php в конце URL**: Проверяет, есть ли "index.php" (или "index.html"/"index.htm") в запросе, и если так, удаляет его из URL.

### Советы:

- Убедитесь, что You test each rule individually while checking the server responses to avoid creating loops.
- После внесения изменений проверьте в браузере и с помощью инструментов для проверки редиректов, чтобы убедиться, что все работает корректно и нет цепочек редиректов.
# index.php в конце
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^  https://site.ru/ [R=301,L]

# Исключаем все лишние слеши.
RewriteCond %{THE_REQUEST} //
RewriteRule .* https://site.ru/$0 [R=301,L]

# www на без www
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule .* https://site.ru/$0 [R=301,L]

# http на https
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} !^443
RewriteRule .* https://site.ru/$0 [R=301,L]
Похожие вопросы