codeigniter и seo

#php #codeigniter #seo

#php #codeigniter #seo

Вопрос:

Я разрабатываю веб-сайт для мобильных телефонов с использованием CodeIgniter. Я чувствую себя комфортно с регулярными выражениями и mod_rewrite. Мой вопрос о том, как создать seo-дружественный URL-адрес, подобный этому, в codeigniter.

http://mysite.com/phones/samsung/model_name/

Я могу сделать это, используя идентификатор категории, подкатегории и т.д. Вот так.

http://mysite.com/phones_c23/samsung_s34/model_name_m32/

Но я ищу более чистое решение (как в примере выше).

Маршруты для меня непригодны в этой ситуации, потому что администратор этого веб-сайта может создавать неограниченное количество основных категорий (например mysite.com/phones / mysite.com/tablet / )

Ответ №1:

Используйте функцию переназначения codeigniter. Второй сегмент URI обычно определяет, какая функция в контроллере вызывается. CodeIgniter позволяет переопределить это поведение с помощью _remap().

Что вы можете сделать, так это:

В контроллере создайте функцию _remap(){} Теперь в функции переназначения используйте сегмент URL, чтобы получить фрагменты вашего URL.

Если запрос такой:http://mysite.com/phones/samsung/model_name

В вашем переназначении должны быть найдены сегменты «samsung», «телефоны» и «имя_модели» .. запустите запрос, чтобы получить детали (соответствующие идентификаторы и т.д.), И вуаля, у вас есть динамично работающая система.

Для получения дополнительной информации проверьте это: http://codeigniter.com/user_guide/general/controllers.html#remapping

Ответ №2:

Я бы не стал так быстро отказываться от маршрутизации. Метод контроллера не обязательно должен быть вторым параметром в URL. Если вы возьмете свой пример того, как вы хотите, чтобы URL выгляделhttp://mysite.com/phones/samsung/ABCD затем внутри routes.php файл, который вы можете сделать

$route[‘телефоны/(:любые)/(:any)’] = «телефоны/ бла/$1/$2»;

Внутри вашего контроллера «Phones» у вас была бы функция под названием «blah» (вероятно, неплохо было бы переименовать ее), и производитель телефона был бы первым параметром, а модель телефона была бы вторым параметром. Это будет работать со всеми производителями и всеми моделями. Вам не пришлось бы использовать другой контроллер или метод в зависимости от различных комбинаций.

Если это не всегда будут телефоны (например, это может быть планшет), и у вас может быть URL, подобныйhttp://mysite.com/tablet/samsung/ABCD , тогда ваш routes.php файл должен быть чем-то вроде $route[‘(:any) /(:any) /(:any)’] = «что-то / бла/$1/$2/$3»; Тогда контроллер «Чего-то» имел бы функцию «бла», которая передавала бы тип электронного устройства (телефон, планшет и т.д.), производителя и модель.

Чтобы сделать это еще более простым, как сказал @Stewie, вы можете использовать _remap() . В руководстве пользователя есть хорошая документация и примеры того, как ее использоватьhttp://codeigniter.com/user_guide/general/controllers.html#remapping