#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