codeigniter, как избежать дублирования контента из-за неправильной настройки маршрутов? - PullRequest
1 голос
/ 19 мая 2011

Я перевожу сложный старый веб-сайт на новый, закодированный с codeigniter, и сталкиваюсь с множеством проблем переписывания URL, приводящих к дублированию контента из-за способа работы конфигурации маршрутов codeigniter.

У меня старые URL, такие как:

  • / detail.php? ID = ABCDE & LANG = EN & страница = 2
  • / детали / ABCDE / о / 2

Новый сайт вместо этого имеет SEO дружественные URL, такие как:

  • / EN / Продукты / жесткий диск-2.html

В моей конфигурации маршрутов у меня есть:

  • $ route ['(: любой) / (: любой) / (: любой)'] = 'контроллер / $ 1 / $ 2 / $ 3';
  • $ url_suffix is ​​'.html'

Это приводит к дублированию контента, потому что:

  • / EN / Продукты / жесткие диски-2
  • / EN / Продукты / жесткий диск-2.html
  • / EN / продукции / жесткий диск-2.html? Р = 2
  • / EN / Продукты / жесткий диск-2? Р = 2
  • / EN / Продукты / жесткий диск-2.html /
  • / EN / Продукты / жесткий диск-2.html / .html

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

Есть ли способ избежать этого? Может быть, использовать регулярное выражение?

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

1 Ответ

0 голосов
/ 25 мая 2011

Я наконец выясняю, как не разбирать дубликаты URL.

Прежде всего в config.php удалите суффикс, лучше никогда не используйте его: $ config ['url_suffix'] = '';

Тогда в rout.php никогда не используйте символы подстановки и всегда используйте регулярные выражения.

То есть, если я использую: $ route ['(: any) / (: num)'] = 'homepage / parser / $ 1 / $ 2'; это будет работать для всех следующих URL:

/a/10
/a/10/11
/a/10/11/12

и так далее!

Вместо того, чтобы:

$route['([\w_-]+)/(\d+)'] = 'homepage/parser/$1/$2';

это работает только для

/a/10

и

$route['([\w_-]+).html'] = 'homepage/parser/$1';

будет работать, только если ваши URL действительно заканчиваются на .html

Не повезло /a/10.html/ по-прежнему является дубликатом, поэтому мне нужно хотя бы одно правило .htaccess, чтобы удалить косые черты из URL

Мне действительно нужны уникальные URL-адреса, так что я думаю, что я прекращаю любую будущую разработку codeigniter для этого проекта, где я смешал url: 1) .html 2) каталоги 3) старые динамические URL-адреса

Вместо этого я выясняю, что для SEO purpouse, вероятно, лучше всего: - использовать только страницы без расширений - избегайте каталогов

Так что, если это так (другой мой проект), я просто использую простые URL в своем коде и регулярные выражения в rout.php.

Единственной проблемой является проблема дублирования косой черты, но этого можно избежать глобально с помощью этого .htaccess из этого другого решения: Удалить косую черту, используя .htaccess, кроме домашней / целевой страницы

...