2009-10-09 2 views
2

Я рассматриваю свои варианты реализации хороших ссылок для нового веб-сайта.симпатичные ссылки с NO id

Я понимаю, как сделать работу основ, к примеру делать:

/вид/postTitle/7895

Я могу просто забрать идентификатор 7895 и просто игнорировать название.

Однако я вижу, что некоторые веб-сайты удается избавиться от ид вообще:

/вид/postTitle

Как это работает?

Единственный способ, о котором я могу думать, это то, что при каждом запросе текст страницы отправляется как строка, а некоторый код выполняет некоторую проверку SQL, чтобы вернуть правильный идентификатор. Однако это означало бы много потенциально дорогостоящих SQL-запросов? Особенно, когда у вас много сообщений.

Кроме того, это означает, что каждый раз, когда кто-то создает сообщение, мне нужно создать уникальную строку, удобную для URL, для этой записи. Мне нужно проверить базу данных, пока я не получу уникальный. Что все кажется слишком большим?

Я смотрю на это неправильно? Или есть готовые API и инструменты, чтобы сделать это проще и эффективнее?

Я использую PHP/MySQL, Apache.

Thanks

+0

Это не будет означать гораздо больше запросов - если у вас есть идентификатор, который вы выбираете по id, если у вас есть URL-адрес, который вы выбираете post_url. Кроме того, если вы индексируете столбец post_url, это будет не намного медленнее, чем выбор по id. – rojoca

ответ

0

У вас есть правильный подход. Обычно, если это простая CMS с сообщениями, используйте пакет WordPress и изменяйте его в соответствии с вашими потребностями. Если у вас есть пользовательские типы данных, я настоятельно рекомендую SilverStripe, и если вы хотите использовать пользователей, используйте Drupal. Существуют библиотеки и функции, плавающие вокруг, которые могут преобразовать заголовок сообщения в URL-адрес, что также было бы хорошей идеей для изучения. Open-Source замечательный, и вы можете посмотреть, как это сделали другие, попробуйте найти github и подобных.

2

Создайте функцию, которая нормализует/дезинфицирует заголовки сообщений - простым способом может быть хэш-представление urlencode() исходного названия. Храните это как «id» вместо числового значения, генерируемого db, и ваш SQL не нуждается в существенном изменении.

1

Вы верны. Есть два аспекта, с которыми вам приходится обращаться.

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

Во-вторых, когда кто-то попадает на ваш сайт со ссылкой, вам необходимо решить его правильно. Это немного сложнее, но может эффективно работать одинаково, если вы думаете о каждом уникальном сгенерированный URL-адрес в качестве идентификатора, потому что это по сути то, чем он становится ... если вы запрашиваете его (escaped, конечно!).

Для надежной реализации, большинство из CMS - WordPress и Drupal приходят на ум - справляются с этим довольно эффективно.Исходя из фона Drupal, я предлагаю вам взглянуть на модули «path» и «pathauto», как это делается с упором на «путь» ... он охватывает обе половины проблемы.

Смежные вопросы