Недавно я был занят своей собственной программой для блогов и, естественно, обратился к проблеме перезаписи URL-адресов, о которой часто говорят в блогах. Одной из причин является проблема с лицом в многопользовательской системе блогов. Изначально я хотел использовать свой блог CSDN http://blog.csdn.net/joshualang в качестве примера, но я подумал об этом и использовал свое пространство ( http:/). /www.tyoo.net ), потому что именно сюда я перейду после того, как закончу свой блог.
Если необходимое переопределение URL-адреса не выполнено, например http://www.tyoo.net/blog/joshualang , появится адрес блога, например http://www.tyoo.net/blog/default.aspx?Bloger=joshualang Все; Следует знать, что большинство пользователей сети рассматривают блог как еще один дом, построенный в Интернете. В реальной жизни они будут учитывать расстояние до домашнего адреса и качество транспорта. Аналогичным образом, дом в Интернете также должен иметь номер дома. это легко запомнить. Этот номер дома не слишком длинный (не очень приличный), и добавление кучи параметров после него может напугать людей. Если вы хотите прочитать статью, вам придется столкнуться с таким множествомhttp://blog.tyoo.net. /Articles/Default.aspx?Bloger=joshualang&ArticleID=20070118234530Вы что-то чувствуете? Давайте посмотрим на эффект, который сейчас имеют многие программы для блогов: http://blog.tyoo.net/joshua/Articles/2007/01/18/ Каждый сразу поймет преимущества этого эффекта, и это подводит нас к ключевому моменту этой статьи!
Да, нам нужно достичь одной из наших целей посредством такой очень регулярной цепочки.
Подходящий URL-адрес следует выбирать по следующим критериям:
• Короткий.
• Легко печатать.
• Можно увидеть структуру сайта.
• «Усекаемый», который позволяет пользователям просматривать сайт, удаляя компоненты URL-адреса.
Мне не нужно больше говорить об этом вопросе. На самом деле, все дело в простоте и практичности.
Примечание. Кстати говоря, необходимо
уже
прочитать документ Скотта Митчелла на веб-сайте MSDN http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?pf=true#top.Некоторые эксперты достаточно ясно изложили здесь принципы перезаписи URL-адресов. Если вы не понимаете, вы можете скачать исходный код приведенного выше документа, чтобы изучить его.
В целях эффективности (время людей дорого, а время программистов тем более) я напрямую использовал компоненты URLRewriter.net. На самом деле у меня никогда раньше не было опыта переписывания URL-адресов, поэтому я примерно прочитал исходник. программу несколько раз и начал приступать к работе. Конечно, вначале нет необходимости в каком-либо техническом содержании. Пока переписывание будет успешным, оно будет приятным. Затем, в процессе непрерывного переписывания, мы выясним проблемы и найдем новые идеи и новые открытия. . . Отсюда и эта статья.
Давайте начнем сейчас. На этот раз основное внимание уделяется переписыванию URL-адреса только что упомянутого шаблона даты
http://blog.tyoo.net/Articles/2007/01/18/233030/joshualang.aspx Это последний эффект, которого здесь можно достичь. .
Основы: компонент UrlRewriter.net (конечно, вы можете написать его самостоятельно), разобраться в
параметрах регулярного выражения: ArticleID //Номер статьи [Тип: Длина строки: 14 (например: ггггммддччммсс) //Осмысленно и не повторяется]
Bloger //Блог Главное имя пользователя [Тип: строка, начинающаяся с буквы]
Одна из проблем, возникающих в процессе перезаписи URL-адреса, — это ошибка 404 при доступе к несуществующему каталогу или файлу. В этом документе на MSDN предлагается создать необходимые папки и пустые страницы в каталоге программы. Это действительно хлопотно, необходимо создать тысячи каталогов.
Поскольку мы не можем просто получить доступ к несуществующим файлам каталогов, нам просто не нужен доступ к таким каталогам. Нам нужно получить доступ к нашим существующим файлам (все мои URL-адреса указывают на страницу Default.aspx в корневом каталоге блога, а затем динамически загружать группу управления для создания различных страниц функций просмотра). эта страница ~/Default .aspx;
Следующая задача — передать параметры, конечно, URL-адрес передается по значению. Вот почему пришло время переписать его.
Главный герой вот-вот появится снова: регулярные выражения.
Использование регулярных выражений здесь действительно здорово~ В каталоге http://blog.tyoo.net/joshualang/Articles/2007/01/18/Default.aspx вы можете создавать правила перезаписи URL-адресов, например:
< RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4</SendTo>
</RewriterRule>
При удалении правил, написанных таким образом, обязательно возникнет ошибка 404, поскольку страница, к которой осуществляется доступ, не существует. Поскольку поиск будет осуществляться по всей метке вашего каталога, если вы создадите еще один проект каталога, он будет слишком большим. Взгляните на следующий код:
<RewriterRule>
.
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6})/Default.aspx</LookFor >
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4&time=$5</SendTo>
</RewriterRule>
Теперь, когда у меня есть дополнительное время, никто не захочет создавать каталог. Затем в полной мере используйте существующие файлы для выполнения этой задачи.
Фактически, многие люди могут подумать об использовании имен файлов вместо структур каталогов. Если подумать, не так ли? Конечно, для этого необходимо определенное понимание регулярных выражений.
Хорошо, давайте посмотрим, как это работает.
<Правило Рерайтера>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6}).aspx</ Ищите>
<SendTo>~/Default.aspx?ArticleID=$2$3$4$5&Bloger=$1</SendTo>
</RewriterRule>
Вы можете легко увидеть, что я использовал "" для экранирования "/" и использовал его в имени файла. Текущая структура:
http://blog.tyoo.net/joshualang/2007/01/18.
Очевидно, мой ArticleID. — это строка, основанная на году, месяце, дне, часе, минуте и секунде, поскольку имеет смысл вставлять данные без учета дублирования, а использование времени здесь также удобно для выполнения запросов. 14-значная комбинация, полученная с помощью $2$3$4$5, является моим идентификатором статьи. Запись можно легко найти по дате публикации и номеру статьи. Последнее преимущество особенно очевидно при удалении.
Теперь давайте удалим часть времени:
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4&Bloger=$1</SendTo>
</RewriterRule>
В свою очередь, мы можем удалить URL-адрес в этом шаблоне: http://blog.tyoo.net/joshualang/Articles/2007.aspx или даже http://blog.tyoo.net/joshualang/Articles/Default.aspx
Isn
.не правда ли, это очень просто? Но вы должны обратить внимание на проблему: ничего невозможно и можно достичь. Есть еще много вещей, которые следует учитывать, например:
http://blog.tyoo.net/joshualang/Articles/2007.aspx и http: //блог. В чем разница между tyoo.net/joshualang/Articles/2007/.aspx Может ли последний работать нормально после соблюдения вышеуказанных правил?
Чегонельзя
сказать: http://blog.tyoo.net/joshualang/Articles/2007/01/08/.aspx тоже неприемлемо. Для достижения соответствующих эффектов перезаписи необходимо определить другие правила ответа.
Хорошо, эффект примерно есть; вот полный код правила:
<!--автор: Джошуа Ли ( [email protected] ) QQ:245965348-->
<!-- Правила отображения контента блога -->
<Правило Рерайтера>
<LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<!-- Правила для списка статей -->
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})/([A-Za-z]w {5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4&Bloger=$5</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})((/)?).aspx</ Ищите>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/([A-Za-z]w{5,16}).aspx</ Ищите>
<SendTo>~/Default.aspx?ArticleID=$1$2$3&Bloger=$4</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2&Bloger=$3</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1&Bloger=$2</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/(d{4})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<Правило Рерайтера>
<LookFor>~/Articles/Default.aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=-1</SendTo>
</RewriterRule>
Примечание. Чтобы предотвратить случайное удаление пользователями важного расширения .aspx, я использую имя пользователя в качестве виртуального идентификационного имени файла.
Получен окончательный URL-адрес: http://blog.tyoo.net/Articles/2007/01/18/015000/joshualang.aspx .
В то же время максимальное 6-значное время в конце установлено как удаляемое и более длинное, даже если он утерян. Также удобнее всего найти список, ближайший ко времени публикации, по определенным номерам.
Удаление имени пользователя не повлияет на использование. Вы все равно сможете быстро получить наиболее подходящий список нужных вам статей через подробный формат времени. Если имя пользователя не повреждено, список статей, соответствующих автору за определенный период времени, можно найти путем удаления.
Также обратите внимание: формат имени пользователя ([A-Za-z]{6-16}) и порядок проверки правил.
Подведите итог:
После прохождения обычного процесса перезаписи URL-адреса он будет иметь строгий формат, как если бы этот каталог действительно существовал, но структура фреймворка станет более удобной и гибкой, что позволит получить ключевые улучшения в функциональности и пользовательском опыте. Давайте пока остановимся на этом. Если у вас есть какие-либо вопросы, пожалуйста, ответьте и присоединяйтесь к обсуждению. Если есть лучший способ переписать его, я был бы рад сообщить мне.
http://www.cnblogs.com/Joshualang/archive/2007/01/19/624302.html