htaccess — как вырезать некоторый текст из url

#regex #apache #.htaccess #mod-rewrite

#регулярное выражение #apache #.htaccess #мод-перезапись

Вопрос:

У меня простой вопрос о htaccess, но я не могу его решить. Часть ссылок моего сайта в поиске Google содержит фрагмент URL-адреса, и я не знаю, как этот фрагмент появился там? вот пример:

в Google seach это:

http://dobry-portal.pl/part1-/Tranformers,main,film,0

реальный адрес — это http://www.dobry-portal.pl/Tranformers,main,film,0

Иногда адреса в Google seach имеют более одной части между косыми чертами, например. http://dobry-portal.pl/part1-/part2-/part3-/Tranformers,main,film,0

Как я могу просто вырезать эти части в htaccess, чтобы перенаправить на реальные адреса http://www.dobry-portal.pl/Tranformers,main,film,0

Я пробовал

RewriteRule (.)/часть1-/(.) $1/$2 [ Л]

но это не работает

Спасибо за помощь, Адам

Ответ №1:

Это должно удалить все «поддельные подкаталоги» между косыми чертами для вас:

 RewriteRule ^.*/([^/,]*,.*) $1 [L,R=301]
  
  • ^.*/ жадно сопоставляет путь до последней косой черты
  • ([^/,]*,.*) захватывает в группу 1…
  • [^/,]* любые символы, которые не являются косыми чертами или запятыми,
  • ,.* затем запятая и остальная часть строки
  • $1 Обратная ссылка заменяет URL-адрес Group 1
  • [L,R=301] последнее правило, постоянное перенаправление

Я уверен, что возможны некоторые изменения, но это должно помочь вам начать.

Ответ №2:

Попробуйте это:

 RewriteRule ^(.*)(/part[0-9] -) (.*)$    $1$3 [L]
  

Вы также можете попробовать шаблон RewriteCond:

 RewriteCond %{REQUEST_URI}   ^(.*)(/part[0-9] -) (.*)$ [NC]
RewriteRule ^                %1%3 [L]
  

Для получения более подробной информации см. Документацию.