Поздняя информация ... сайт использует Joomla CMS.См. ОБНОВЛЕНИЕ ниже.
Чтобы перенаправить запросы на физические файлы, которые больше не существуют, вам нужно на самом деле проверить, что файл больше не существует, иначе он действительно будет "перенаправить все "(как упоминалось в комментариях).
Например, чтобы перенаправить любые запросы вида /artigos/<something>
, которые не отображаются на физические файлы, на /artigos/
, вы можете сделать следующее:
RewriteEngine On
REwriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(artigos/). /$1 [R=302,L]
Обратная ссылка $1
просто не позволяет вам повторять имя каталога.
Первое условие, которое проверяет среду REDIRECT_STATUS
, предназначено для обеспечения перенаправления только прямых запросов.Это, вероятно, требуется только в том случае, если вы все еще используете Apache 2.2 (в отличие от 2.4), так как mod_dir будет выполняться первым, переписывая перенаправленный запрос в index.php
(если он существует) и вызывая цикл перезаписи.В Apache 2.4 mod_dir запускается позже.
Тестируйте с 302 и переходите на 301 только тогда, когда вы уверены, что он работает нормально - чтобы предотвратить проблемы с кэшированием.
Вам необходимо очистить браузеркэш перед тестированием.
Однако 404, как правило, будет лучшим ответом.Поисковые системы, скорее всего, увидят перенаправление на общий корень как софт-404, и пользователи с большей вероятностью будут «сбиты с толку», когда не увидят запрошенную информацию.
RewriteRule ^artigos/(.*)$ /artigos/$1 [R=301,L]
Само по себе это приведет к циклу перенаправления, поскольку он просто перенаправляет на себя.
ОБНОВЛЕНИЕ: это не файл, этостатья в Joomla CMS
Если действительные URL-адреса не сопоставляются с физическими файлами, это невозможно сделать в .htaccess
.В вашем случае действительный URL-адрес определяется CMS Joomla (как хранится в базе данных Joomla)..htaccess
обрабатывается в самом начале запроса, прежде чем управление переходит к PHP / Joomla.Директивы в .htaccess
могут смотреть только на HTTP-запрос и физическую файловую систему.
Joomla использует шаблон фронт-контроллера.Все URL, которые не отображаются на физические файлы (исключая статические ресурсы, такие как CSS, JS и изображения), внутренне переписываются в index.php
(«front-controller»), это эффективно «маршрутизирует» URL и решает, какой контентдолжен быть возвращен.
То, что вы просите, может быть сделано только на статическом веб-сайте, где URL-адреса сопоставляются с физическими файлами в файловой системе.
Вам необходимо выполнить это перенаправление в самой Joomla, когда Joomla определил, что запрошенный URL не существует.(В любом случае это более эффективно, так как вам нужно выполнять код только после определения 404, а не при каждом отдельном запросе, как если бы вы использовали .htaccess
.)