Как удалить дублирующиеся и ненужные части в URL, используя htaccess и regex?

Вопрос или проблема

Я хочу навсегда перенаправить некоторые URL, которые были удалены, и роботы упорно следуют за ними. У меня есть стандартная конфигурация WordPress для .htaccess.

www.example.com/customers/em/customers/any-url 

на

www.example.com/customers/any-url

и

www.example.com/any-url/map/?str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo 

на

www.example.com/customers/any-url

Мой htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Я предполагаю, что any-url буквально любой путь URL, такой как foo или foo/bar/baz/something, но не пусто.

Попробуйте следующее:

# Перенаправить "/customers/em/customers/any-url" на "/customers/any-url"
RewriteRule ^(customers)/em/customers/(.+) /$1/$2 [R=301,L]

Ссылка $1 содержит “customers” (сохраняет повторение) из шаблона директивы RewriteRule. И ссылка $2 содержит часть any-url. Любая строка запроса, которая может присутствовать в запросе, передается без изменений.

Что касается URL /any-url/map/?str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo, вы фактически не указали, является ли строка запроса буквальной или переменной – я предполагаю, что строка запроса буквальная и должна быть точно сопоставлена с тем, что написано. В этом случае вам нужно сделать что-то вроде следующего:

# Перенаправить "/any-url/map/?str=<значение>" на "/customers/any-url"
RewriteCond %{QUERY_STRING} =str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo
RewriteRule ^(.+)/map/$ /customers/$1 [QSD,R=301,L]

Префикс = в шаблоне условия (2-й аргумент директивы RewriteCond) делает его лексикографическим сравнением строк (не регулярным выражением), так что строка сопоставляется буквально.

Флаг QSD в директиве RewriteRule необходим, чтобы отбросить строку запроса из первоначального запроса.

Если, однако, параметр URL str должен принимать любое ненулевое значение, то измените вышеуказанный шаблон условия, чтобы он читался: ^str=..

Эти перенаправления должны находиться в верху файла .htaccess, перед вашими существующими директивами (фронт-контроллером WordPress), иначе они, возможно, не будут обработаны.

Вы также должны сначала протестировать с 302 (временными) перенаправлениями и только затем поменять на 301 (постоянное) перенаправление, как только полностью удостоверитесь, что они работают должным образом. 301-е перенаправления кэшируются браузером надолго, что может осложнить тестирование.

Убедитесь, что кэш браузера очищен перед тестированием.

Справка:

Ответ или решение

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

Форест (FOREST) подача

Основная информация (F-Fact)

Вы используете конфигурацию Apache с модулем mod_rewrite, которая является мощным инструментом для управления URL. Это актуально для веб-сайтов на WordPress, поскольку файловая структура и URL могут быстро становиться сложными.

Обоснование (O-Outcome)

Используя правила переадресации в .htaccess, вы сможете не только улучшить SEO вашего сайта, очищая и оптимизируя URL, но также уменьшите ошибочные запросы от роботов, которые все еще следуют за старым контентом.

Полезность (R-Relevance)

Из предоставленных примеров видно, что вам необходимо удалять дублированные части строк и устранять ненужные параметры запроса. Это поможет встроенным ботам и пользователям перейти по корректным ссылкам, сокращая лишние запросы на сервер.

Эмоциональная связь (E-Emotional Connection)

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

Доверие (S-Trust)

Предоставляя вам детальные инструкции, мы стремимся обеспечить успешную настройку и предоставить уверенность в том, что ваш сайт работает на оптимальном уровне. Изучите документацию Apache mod_rewrite для более глубокого понимания.

Вовлечение (T-Tell)

Практическая реализация:

  1. Удаление дубликатов в URL:

    # Перенаправление "www.example.com/customers/em/customers/any-url" на "www.example.com/customers/any-url"
    RewriteRule ^(customers)/em/customers/(.+) /$1/$2 [R=301,L]
    • Здесь $1 содержит "customers", а $2 — "any-url".
  2. Удаление ненужных параметров запроса:

    # Перенаправление "www.example.com/any-url/map/?str=<значение>" на "www.example.com/customers/any-url"
    RewriteCond %{QUERY_STRING} =str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo
    RewriteRule ^(.+)/map/$ /customers/$1 [QSD,R=301,L]
    • Убедитесь, что QUERY_STRING точно совпадает, чтобы произошло перенаправление. Флаг QSD используется для удаления строки запроса.
  3. Рекомендации:

    • Поместите эти правила в начале .htaccess, чтобы они применялись до выполнения других правил.
    • Тестируйте правила с редиректом 302 (временный) перед тем, как делать их 301 (постоянными).
    • Отчистите кэш браузера перед тестированием, чтобы избежать сохраняемых старых данных.

Следуя этим рекомендациям, вы обеспечите корректную работу редиректов и улучшите функционирование вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...