Какие изменения необходимо внести в файл .htaccess, чтобы устранить проблему циклического редиректа?

Здравствуйте! <br/> У меня есть вопрос, и я буду признателен за помощь специалистов в этой области. <br/> <br/> У меня функционирующий сайт, который написан на HTML. Мне нужно, чтобы страницы открывались без окончания .html и отображались в виде / <br/> Например, страница <a href="https://sitename.ru/about.html" rel="nofollow">https://sitename.ru/about.html</a> должна отображаться как <a href="https://sitename.ru/about/" rel="nofollow">https://sitename.ru/about/</a> в адресной строке браузера. <br/> Также, в случае ошибки в адресе страницы, например <a href="https://sitename.ru/abbout.html" rel="nofollow">https://sitename.ru/abbout.html</a> или <a href="https://sitename.ru/abbout/" rel="nofollow">https://sitename.ru/abbout/</a>, пользователи не должны перенаправляться на страницу ошибки; вместо этого появляется адрес вида <a href="https://sitename.ru/abbout.html.html.html.html.html.html.html.html.html.html.html.html.html.html" rel="nofollow">https://sitename.ru/abbout.html.html.html.html.htm...</a> <br/> <br/> <br/> В моем файле .htaccess currently присутствует следующий код: <br/> <pre><code># Код для файла .htaccess
&lt;Files .htaccess&gt;
Order Allow,Deny
Deny from all
&lt;/Files&gt;

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

# Правила для html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ https://sitename.ru/$1/ [R=301,L]

# Перенаправление index
RewriteRule index https://sitename.ru/ [R=301,L]

# Перенаправление на /
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*)/ /$1.html

# SSI
AddType text/html .htm .html
AddOutputFilter INCLUDES .htm .html

# Ошибки
</code></pre>
  • 19 декабря 2024 г. 11:13
Ответы на вопрос 2
Чтобы устранить проблему циклического редиректа в вашем файле `.htaccess`, нужно внести несколько изменений и улучшений. Проблема может возникать из-за неправильных правил перенаправления, особенно если некоторые правила пересекаются или конфликтуют между собой.

1. **Проблема с циклическим редиректом**: для начала, убедитесь, что вы не создаете постоянные циклы при перенаправлении. Например, если вы перенаправляете `about.html` на `about/` и затем каким-то образом перенаправляете `about/` обратно на `about.html`, это вызовет циклический редирект.

2. **Обновленный файл .htaccess**:

```apache
# Код для файла .htaccess
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

Options +FollowSymLinks

RewriteEngine on
RewriteBase /

# Если запрос уже не к файлу или каталогу
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Убедитесь, что .html не добавляется к URL
RewriteCond %{REQUEST_URI} !\.html$
# Убедитесь, что URL не заканчивается на /
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

# Правила для html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ https://sitename.ru/$1/ [R=301,L]

# Перенаправление index
RewriteRule ^index/?$ https://sitename.ru/ [R=301,L]

# Переопределение URL для .html страниц
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ $1.html [L]

# SSI
AddType text/html .htm .html
AddOutputFilter INCLUDES .htm .html

# Обработка ошибок
# custom 404 error handling can be added here if needed.
```

### Объяснение изменений и добавлений:

1. **Убрано лишнее правило для перенаправления `/` на `.html`**: Убедитесь, что перенаправление с URL-адреса без `.html` на страницу `.html` происходит только если это действительно необходимо.

2. **Добавлен дополнительный `RewriteCond` для фильтрации запросов**: Перед каждым перенаправлением проводятся условия, которые проверяют, что затрагиваемые файлы не являются существующими файлами или каталогами. Это предотвращает создание циклов на уже существующих адресах.

3. **Корректировка редиректов для `index`**: Убедитесь, что `index` перенаправляется корректно.

4. **Обработка ошибок**: Если вы хотите обрабатывать ошибки 404 (например, для неверных URL), вы можете добавить настраиваемые страницы ошибок в самом конце файла, используя директиву `ErrorDocument`.

Эти изменения должны помочь устранить циклический редирект и обеспечить правильное перенаправление ваших страниц. Протестируйте изменения в настройках `.htaccess`, чтобы убедиться, что все работает так, как ожидается.
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*)/ /$1.html

Заменить на
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ /$1.html [L]
Похожие вопросы