Вопрос или проблема
Я хочу навсегда перенаправить некоторые 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)
Практическая реализация:
-
Удаление дубликатов в 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".
- Здесь
-
Удаление ненужных параметров запроса:
# Перенаправление "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
используется для удаления строки запроса.
- Убедитесь, что
-
Рекомендации:
- Поместите эти правила в начале
.htaccess
, чтобы они применялись до выполнения других правил. - Тестируйте правила с редиректом 302 (временный) перед тем, как делать их 301 (постоянными).
- Отчистите кэш браузера перед тестированием, чтобы избежать сохраняемых старых данных.
- Поместите эти правила в начале
Следуя этим рекомендациям, вы обеспечите корректную работу редиректов и улучшите функционирование вашего сайта.