правило htaccess — как сопоставить, если URL не содержит определенной строки

У меня есть несколько страниц со следующей структурой URL:

/детали/идентификатор/125/

и по какой-то причине Google проиндексировал страницы, которые выглядят как /details/125/ с отсутствующей частью /id/. Это вызывает проблемы с дублированием контента.

Поэтому мне нужно правило .htaccess RedirectMatch, чтобы, если URL-адрес содержит /details/, но не содержит /id/ впоследствии, перенаправлять на страницу 404.

Что я пробовал до сих пор без везения:

RedirectMatch 404 ^/детали/(?!id)/

В своем исследовании я нашел эту информацию http://www.mycomputingart.com/programming/Z24.regexpadv.html, который, по моему мнению, связан с тем, что мне нужно сделать, но мне трудно его понять.


person user1377544    schedule 06.05.2012    source источник
comment
Это также может быть вам полезно: support.google.com/ веб-мастера/bin/   -  person Paul    schedule 06.05.2012
comment
Спасибо. К сожалению, для моей конкретной ситуации мне нужно сделать это с помощью htaccess.   -  person user1377544    schedule 06.05.2012


Ответы (1)


Для ваших нужд:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/details/.+$
RewriteRule !^/details/id/.+$ /b/ [R=404,L]
person s.webbandit    schedule 06.05.2012
comment
Я запутался. Для чего нужна часть /b/? У меня есть страницы с разными структурами URL-адресов, и указанное вами правило перезаписи вообще не указывает сегменты /details/ или /id/. Из моих очень ограниченных знаний, судя по всему, ваше правило будет ловить все URL-адреса. - person user1377544; 06.05.2012
comment
Ой, извини. Вставлено так же, как я проверил на своем сервере) Посмотрите измененный ответ - person s.webbandit; 06.05.2012
comment
наличие этого в моем htaccess просто дает ошибку 500, внутреннюю ошибку сервера. - person user1377544; 06.05.2012
comment
Даже проверка кода в инструменте тестирования htaccess htaccess.madewithlove.be не работает. Попробуйте test.com/details/125 в верхней строке, используя свой код. Пишет, что это условие не выполнено - person user1377544; 06.05.2012
comment
Какова цель части /b/ в правиле? - person user1377544; 09.05.2012
comment
/b/ - это направление перезаписи. Но перезапись дает ошибку 404 (R=404). Что бы там ни было. - person s.webbandit; 10.05.2012