Статьи

Дружественные URL

Поэтому я надеюсь, что все в США пережили кризис летнего времени 2007 года! Я не знаю о вас, но я даже не чувствовал это 🙂

Недавно я просматривал форумы, как обычно, когда искал тему для блога, и натолкнулся на сообщение, написанное форумчанами под названием « Чистые и описательные ссылки». В этом посте форум спрашивает:

«Что вы, коллеги-разработчики CF, сделали, чтобы ваши URL выглядели лучше? Я хотел бы увидеть много примеров и вариантов, если бы вы все были так любезны поделиться »

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

В течение самого длительного времени поисковые системы обрабатывали бы URL-адреса с помощью строк запроса, или динамических URL-адресов, все после вопросительного знака (?) В URL-адресе, иначе. В основном страницы, на которых были эти строки запроса, были бы ранжированы ниже, чем страница, на которой этого не было. Так что, если у вас был URL:

http://www.example.com/books/index.cfm?category=coldfusion&author=forta

в результатах поиска он будет ниже по сравнению с URL, отформатированным следующим образом:

 http://www.example.com/books/coldfusion/forta/

Поэтому для разработчиков было довольно сложной задачей добиться, чтобы их URL были «чистыми», то есть они хотели убрать из смеси вопросительные знаки (?), Амперсанды (&) и знаки равенства (=). Это приведет к так называемому URL-адресу, дружественному поисковой системе, и позволит вашему сайту повысить рейтинг. Быстрая касательная здесь; Google заявил, что он будет лучше индексировать динамические URL-адреса, поэтому проблема URL-адресов, удобных для поисковых систем, исчезает, но теперь она превращается в более удобную для пользователей проблему URL-адресов. Это означает, что разработчики, клиенты и пользователи хотят URL-адреса, которые другие пользователи могут понимать, запоминать и делиться легче, чем более длинные динамические URL-адреса. В целом идея дружественного URL гораздо более принята.

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

 http://www.example.com/books/coldfusion/forta/

в

 http://www.example.com/books/index.cfm?category=coldfusion&author=forta

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

В зависимости от вашего веб-сервера у вас уже может быть установлен и готов к использованию модуль перезаписи. Если вы используете ColdFusion на Apache, у вас есть популярный
mod_rewrite в вашем распоряжении для тех, кто в IIS, это немного больше работы, поскольку IIS не поддерживает переписывание из коробки. К счастью, есть варианты, которые делают IIS таким же крутым, как Apache, как за плату, так и бесплатно. Оплата, которую я обычно рекомендую — IsapiRewrite от Helicon. Это плагин ISAPI, который работает очень похоже на mod_rewrite, фактически версия 3 использует те же самые точные правила! У них есть бесплатная версия для 1 сайта или за 99 долларов вы можете получить лицензию на неограниченное количество сайтов IIS. Если у вас ограниченный бюджет, есть также фильтр перезаписи ISAPI от Ionic, который также совершенно бесплатный и довольно надежный.

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

Но что, если у вас нет Apache, и вы не можете установить плагин для IIS, чтобы получить такие замечательные возможности переписывания? Вы до ручья без весла? Осталось страдать из-за какой-то корпоративной политики? Не за что! Прежде чем идти по этому пути, позвольте мне сказать, что по моему опыту модули перезаписи намного более надежны и, как правило, будут выполнять все, что мы здесь обсудим. Однако, говоря о том, что нередко можно увидеть программный способ решения проблемы дружественных URL.

Одним из вариантов, который не получил широкого распространения и обычно не одобряется в мире разработчиков, является метод 404. Здесь вы настраиваете страницу 404 для своего сайта и, используя некоторую практику кодирования (например, операторы переключения регистра), проверяете, есть ли у вас совпадение, а затем добавляете соответствующий код, чтобы он работал. Я не собираюсь идти по этому пути, потому что я не рекомендую его по многим причинам. Основная причина в том, что он действительно испортил статистику для вашего сайта, так как в журналах все сообщается как ошибка 404. Насколько я понимаю, многие поисковые системы удаляют 404 страницы из своих индексов, но, кому нужны поисковые системы, да, попробуйте объяснить это клиенту!

Другой вариант — использовать то, что я называю сценарием шлюза. Этот скрипт шлюза позволяет вам запускать все из центрального места, и с помощью некоторого причудливого кодирования вы можете создать эти дружественные URL-адреса, не получая кучу 404 ошибок. На самом деле я уверен, что вы уже видели это на практике в нескольких блогах ColdFusion, которые вы читали! У большинства пользователей, которые используют замечательный BlogCFC , были некоторое время дружественные URL-адреса с использованием этого метода. В приложении BlogCFC URL-адреса обычно выглядят так:

 http://ray.camdenfamily.com/index.cfm/2007/4/3/Did-you-know-about-the-Log-Viewer-Filter

В приведенном выше URL-адресе у Рэя есть скрипт шлюза, работающий в корневом каталоге index.cfm на его сайте. Затем, используя немного кода CF, он может извлечь «/ 2007/4/3 / Did-you-know-about-the-Log-Viewer-Filter» и поработать с ним. Преимущества использования сценария шлюза в том, что index.cfm фактически существует на сервере, поэтому ваш веб-сервер не возвращает его как ошибку 404 И также записывает полную страницу в виде уникального URL, чтобы вы могли по-прежнему видеть, какие страницы есть у ваших пользователей. посещение и т.д. Так как он это сделал? Давайте взглянем на его код:

 

/**
 * Parses my SES format. Demands /YYYY/MMMM/TITLE or /YYYY/MMMM/DDDD/TITLE
 * One line from MikeD
 *
 * @author Raymond Camden ([email protected])
 * @version 1, June 23, 2005
 */ 
function parseMySES() {
	//line below from Mike D.
	var urlVars=reReplaceNoCase(trim(cgi.path_info), '.+.cfm/? *', '');
	var r = structNew();
	var theLen = listLen(urlVars,"/");

	if(len(urlVars) is 0 or urlvars is "/") return r;
	
	//handles categories
	if(theLen is 1) {
			urlVars = replace(urlVars, "/","");
			r.categoryName = urlVars;	
			return r;
	}

	r.year = listFirst(urlVars,"/");
	if(theLen gte 2) r.month = listGetAt(urlVars,2,"/");
	if(theLen gte 3) r.day = listGetAt(urlVars,3,"/");
	if(theLen gte 4) r.title = listLast(urlVars, "/");
	return r;
}

Первое, что вы заметите, это то, что блог и функция Рэя требуют, чтобы ваши URL были в определенном формате. Это обычная практика при использовании сценария шлюза, но немного поработав и добавив немного кода, вы можете сделать свой сценарий и URL более универсальными.

Основы функции выше — взять переменную CGI.PATH_INFO, возвращаемую ColdFusion, разобрать все после «.cfm» и использовать косую черту «/» в качестве разделителя. Переменная CGI.PATH_INFO возвращает дополнительную информацию о пути после имени скрипта. Таким образом, в приведенном выше примере из блога Рэя это будет «/ 2007/4/3 / Did-you-know-about-the-Log-Viewer-Filter», то есть все после index.cfm. Теперь в версиях, предшествующих ColdFusion 7, переменная CGI.PATH_INFO фактически возвращает имя сценария И дополнительную информацию о пути, поэтому она будет выглядеть примерно так: «index.cfm / 2007/4/3 / Did-you-know-about-the-» Log-Viewer-фильтр». Рэй обрабатывает это, удаляя файл .cfm и все перед ним, прежде чем анализировать строку, как видно из этой строки кода:

 var urlVars=reReplaceNoCase(trim(cgi.path_info), '.+.cfm/? *', '');

Как только у него будет «чистый» набор переменных, он может рассматривать его как список, используя косую черту «/» в качестве разделителя. Вы можете видеть из остальной части своего сценария выше, что он просто проверяет длину списка, чтобы определить, какие переменные можно установить и использовать.

Использование переменной CGI.PATH_INFO — отличный способ создать дружественные URL-адреса, которые понравятся любой поисковой системе и большинству людей. Теперь есть другие «вещи», которые вы можете сделать, чтобы помочь удалить расширение файла .cfm, но они обычно требуют немного больше работы со стороны веб-сервера дома и не стоят дополнительных усилий. Если вам нужен этот «внешний вид», я бы рекомендовал использовать один из модулей, упомянутых выше.

Итак, у вас есть несколько вариантов, которые помогут вам начать путь по более дружественным URL.