Настройка URL Cakephp для SEO - PullRequest
0 голосов
/ 22 июля 2011


Я занимаюсь разработкой сайта поиска медицинской продукции.Мне нужно отображать мой сайт в поисковых системах всякий раз, когда пользователь пытается найти лекарство [ИМЯ КОМПАНИИ] [БОЛЕЗНЬ].Для этого я создал на своем сайте страницу, которая гласит НАИМЕНОВАНИЕ КОМПАНИИ и ЗАБОЛЕВАНИЕ из URL и перечисляет все продукты.

Теперь мне нужно присвоить этой странице URL-адрес, например www.sitename.com/[COMPANY NAME] _medicine_[DISEASE] .html
Я использую фреймворк Cakephp для разработки.Есть ли способ реализовать это форматирование URL в маршрутах?Или есть другой способ?пожалуйста помоги.

1 Ответ

4 голосов
/ 22 июля 2011

как насчет разделения их косыми чертами?

// www.sitename.com/[COMPANY NAME]/medicine/[DISEASE]

Router::connect('/:company/medicine/:disease', array('controller' => 'diseases', 'action' => 'index'),
                                               array('pass'=>array('company','disease'),
                                               'company'=>"[a-zA-Z\.]+*",
                                               'disease'=>'[a-zA-Z\.]+'));

и контроллер

function diseases($company,$disease){

}

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

Удачи

EDITED : хорошо, мне было слишком любопытно об этой проблеме, и я написал маршрутвот так

Router::connect('/:company_medicine_:disease', array('controller' => 'pages', 'action' => 'test'),
                                               array('pass'=>array('company','disease'),
                                               'company'=>'[a-zA-Z]+',
                                               'disease'=>'[a-zA-Z]+'));

и он не работает u_U

, как я и подозревал, проблема в том, что Cake считает, что имя пользовательского элемента маршрута равно :company_medicineа не :company .. после нескольких минут, касающихся / чтения кода Cake, я узнал точное место, где Cake анализирует маршрут и извлекает имена пропущенных элементов.Он находится в / cake / libs / router.php в классе CakeRoute , метод _writeRoute () (около строки 1369):

preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $parsed, $namedElements);

так что, как вы можете видеть в регулярном выражении, имена элементов могут содержать подчеркивание, поэтому Cake считает, что именем параметра является ": company_medicine".Таким образом, у вас есть четыре решения:

  • используйте косые черты в качестве разделителей для ваших URL
  • измените порядок вашего параметра так, чтобы он был medicine_[COMPANY]_[DISEASE]
  • измените строку 1369 router.php на эту (НЕ РЕКОМЕНДУЕТСЯ, я думаю, что это нарушит маршруты для плагинов):

    preg_match_all('#:([A-Za-z0-9]+)#', $parsed, $namedElements);

  • используйте url rewrite в вашем .htaccess, чтобы перенаправить все [COMPANY]_medicine_[DISEASE] на [COMPANY]/medicine/[DISEASE], чтобы торт видел его разделенным косой чертой, а браузер - разделенным подчеркиванием.(Я не проверял это, я никогда не добавлял другое правило в .htaccess для Cake = P)

...