Как выполнить 301 редирект с исключением определенного раздела?

Добрый день. 

Мне нужно создать правило для 301 редиректа с исключением папки. У меня есть страницы с такой структурой: 

<pre><code class="html">/catalog/раздел
/catalog/раздел/подраздел
/catalog/раздел/подраздел/товар</code></pre> 

Я хочу настроить редирект, чтобы исключить папку /catalog и получить такие адреса: 

<pre><code class="html">/раздел
/раздел/подраздел
/раздел/подраздел/товар</code></pre> 

Я нашел условие, но оно работает только для одного уровня вложенности: 

<pre><code class="html">RewriteRule ^catalog/([^/.]+)/?$ https://site.ru/$1 [R=301,L]</code></pre> 

Как можно настроить правило для нескольких уровней вложенности?
  • 16 октября 2024 г. 17:52
Ответы на вопрос 2
Чтобы выполнить 301 редирект с исключением определенного раздела и сохранить многоуровневую структуру URL, можно использовать следующее правило в файле `.htaccess`.

Ваше правило будет выглядеть так:

```apache
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/catalog/(.*)$
RewriteRule ^catalog/(.*)$ https://site.ru/$1 [R=301,L]
```

### Объяснение:

1. `RewriteEngine On` - включает модуль переписывания URL.
  
2. `RewriteCond %{REQUEST_URI} ^/catalog/(.*)$` - проверяет, что URI начинается с `/catalog/`, и сохраняет остальную часть пути в переменной (в нашем случае это будет все, что идет после `/catalog/`).

3. `RewriteRule ^catalog/(.*)$ https://site.ru/$1 [R=301,L]` - выполняет редирект. `$1` здесь будет содержать все символы после `/catalog/`, что позволяет сохранять многоуровневую структуру. 

Таким образом, при обращении к URL вида `/catalog/раздел`, пользователь будет перенаправлен на `/раздел`, при обращении к `/catalog/раздел/подраздел/товар` - на `/раздел/подраздел/товар`, и так дальше.

### Примечание:

Убедитесь, что этот код находится в файле `.htaccess` в корне вашего веб-сервера, и что ваш сервер поддерживает модуль `mod_rewrite`.
RewriteRule ^catalog/(.+) https://site.ru/$1 [R=301,L]
Похожие вопросы