Я давно не писал технических статей. Если вам это не понятно, просто прочитайте еще несколько статей или ответьте в конце статьи (это самый эффективный способ, я постараюсь). Чтобы помочь вам ответить на ваши сомнения,
я пришел сюда, чтобы найти эту статью, вы все должны знать, что такое доменное имя второго уровня, поэтому я не буду говорить ерунду, но прежде чем обсуждать, вы должны сначала разобраться в идеологической проблеме.
Проблема, которую многие друзья не смогли понять (я тоже не смог разобраться несколько дней назад) заключается в том, что после того, как я ввожу адрес, почему URL перезаписывается?
Шаг 1. Введите адрес в браузере, например http://blog.downcodes.com , и нажмите Enter. Что произойдет?
Чтобы упростить задачу, поясню ее так:
Шаг 2. Сначала введенный адрес анализируется и, наконец, передается на обработку в IIS. В мире .net IIS передает такой запрос веб-процессору для обработки. Веб-процессор возвращает результаты обработки браузеру и отображает их пользователю.
Пожалуйста, не игнорируйте эту проблему. Все на втором этапе выполняется на стороне сервера. Когда это происходит, адрес в браузере клиента не изменится, даже если веб-процессор вернет результат обработки в конечном итоге. , указанный выше адрес не изменится.
URL-адрес, который вы вводите вначале, действует только как стук в дверь. Как только в дверь постучат, функция прекращает работу. Адрес видят только ваши глаза. Браузер, сервер и т. д. не знают этого адреса.
Проблема, которую необходимо понять, заключается в том, что так называемая перезапись URL-адресов — это всего лишь внутренняя история, известная веб-разработчикам. Пользователь понятия не имеет, что происходит. Он думает, что вводимый им адрес — это результат, который должен отображаться. Другими словами, мы контролируем то, что отображается за кадром.
Следующее, что следует учитывать, — как управлять отображаемым контентом?
Из упомянутого выше процесса очевидно, что работой веб-процессора необходимо манипулировать.
Одним из самых простых соображений является то, что пользователь вводит простой адрес без каких-либо параметров, http://blog.downcodes.com , а затем We. измените этот адрес на адрес с параметрами, отвечающими потребностям программы, http://kerry.com?lover=notus и, наконец, обработайте его.
На этом этапе находится так называемая перезапись URL.
В терминах .net нам необходимо зарегистрировать http-модуль, чтобы приложение могло обрабатывать определенные URL-адреса.
Зарегистрируйте httpmodule в web.config,
примерно эквивалентна этой программе
в предоставляемой нами программе httpmodule
// Используйте нашу программу httpmodule для перехвата исходного URL-адреса.
String OriginalUrl=" http://blog.downcodes.com ";
//Обрабатываем исходный URL-адрес и получаем последний требуемый URL-адрес, значение http://kerry.com?lover=notus
String FinalUrl=Rewrite(OriginalUrl);
// контекст повторно отправляет URL-адрес внутри IIS для обработки
context.RewritePath(FinalUrl);
Далее мы реализуем перезапись URL-адресов.
Шаг 1. Определите, какие URL-адреса необходимо переписать, то есть сформулируйте правила перезаписи. Шаг 2. Напишите обработчик httpmodule. Шаг 3. Интегрируйте написанный http-модуль в веб-программу и начните работать.
Выше приведены базовые знания о перезаписи URL-адресов. . и используя перезапись URL-адреса для реализации доменного имени второго уровня, процесс один и тот же, поскольку независимо от того, является ли это доменным именем второго уровня или доменным именем третьего уровня, до тех пор, пока мы перехватываем его. этот URL-адрес, мы можем манипулировать им во время обработки.
Эти задачи довольно неприятны, но в Интернете есть эксперты, которые написали для нас такую программу. См. следующую статью:
.china/msdn/library/webservices/asp.net/URLRewriting.mspx
http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html
http://www.cnblogs.com/jzywh/ archive/2006/02/20/334004.htmlСтатья
окончена.
В процессе реализации вы столкнетесь с некоторыми проблемами, большинство из которых вызваны невнимательным прочтением приведенной выше статьи, но, честно говоря, читать такое непросто. длинная статья. Позвольте мне записать несколько важных вопросов ниже. Последние два вопроса. Используйте специальный код, чтобы показать, как обрабатывать переписанный целевой URL-адрес в соответствии с нашими требованиями.
Что такое URLRewriter от Microsoft. Где я могу скачать этот проект?
Это пример программы, представленный в статье на msdn, посвященной URLRewriter. Его можно скачать здесь.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Как использовать эти коды, это сложно?
Конечно, это не проблема. Вот что нужно сделать:
Загрузите код на свой компьютер.
После установки добавьте проект URLRewriter в свой собственный проект, следуйте методу, указанному выше, измените конфигурацию кода web.config и начните его использовать.
Что такое httpmodule?
Проще говоря, это программа, которая обрабатывает HTTP-запросы. Для более подробного понимания обратитесь к документации SDK.
Как реализовать панорамирование?
Сначала добавьте доменное имя второго уровня *.kerry.com к поставщику услуг доменных имен, указывая на IP-адрес вашего сервера.
Затем создайте сайт в IIS, оставьте заголовок хоста этого сайта пустым и укажите общий порт 80. Этот сайт является веб-сайтом по умолчанию для всего порта сервера 80.
Добавьте на этот сайт сопоставление приложения с подстановочными знаками (Свойства сайта IIS->Домашний каталог->Конфигурация). Цель этого сопоставления — заставить asp.net ISAPI взять на себя управление любым сайтом с дополнительным доменным именем, который не указан в IIS.
Что произойдет, если вы введете доменное имя второго уровня?
Когда IIS обнаруживает, что входящий URL-адрес является доменным именем второго уровня, он сначала проверяет, существует ли сайт, зарегистрированный с этим доменным именем второго уровня в IIS. Если да, он будет перенесен на этот сайт, в противном случае он будет перенесен. к сайту по умолчанию, этот сайт по умолчанию — это сайт с ранее настроенным пустым заголовком хоста. Таким образом, порт может иметь только один сайт с пустым заголовком хоста.
Мы настроили asp.net ISAPI, чтобы взять на себя управление этими бездомными детьми. Напишите программу для анализа входящего URL-адреса и выполнения его перезаписи.
Почему мой httpmodule не работает?
После установки точки останова в программе httpmodule, несмотря ни на что, процесс не продолжается. Причина в том, что вы не зарегистрировали свою программу httpmodule в веб-программе. Так и должно быть. сделано в web.config. Завершено.
<система.веб>
<httpМодули>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpМодули>
</система.веб>
Почему мне всегда выдается сообщение «Ошибка неизвестного раздела конфигурации RewriterConfig»?
Это связано с тем, что вы не зарегистрировали раздел конфигурации RewriterConfig в веб-программе. Эту работу необходимо выполнить в web.config.
<конфигурационные секции>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
Затем вы можете настроить правила, используя раздел RewriterConfig в <configuration>.
В какой части httpmodule обрабатывается URL-адрес?
Основная часть работы находится в методе URLRewriter.Rewrite(). Ключевой этап:
если (re.IsMatch(requestedPath))
Очевидно, это определяет, является ли входящий URL-адрес тем URL-адресом, который мы хотим переписать. Давайте посмотрим.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
Здесь получен целевой URL-адрес, настроенный в web.config.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Перепишите URL внутри.
Я не хочу жестко прописывать доменное имя второго уровня в web.config, а целевой URL, который я хочу переписать, не может быть жестко закодирован. Например, если у нас есть такая необходимость.
Фактическая страница обработки blog.downcodes.com — kerry.com/action.aspx?id=1.
Фактическая страница обработки call.kerryl.com — kerry.com/action.aspx?id=2.
Фактическая страница обработки walkwith.kerry.com — kerry.com/walk.aspx.
Как с этим справиться?
В это время вам необходимо произвести некоторые манипуляции с упомянутыми выше кодами.
если (re.IsMatch(requestedPath))
{
//Находим доменное имя второго уровня в URL
строка [] UserHost = app.Request.Url.Host.Split (new Char [] { '.' });
string domain2=UserHost [0]
//Устанавливаем целевой URL-адрес, который будет перезаписан при необходимости
строка sendToUrl;
если(домен2==”Любовь”)
sendToUrl =”/action.aspx?id=1”;
иначе, если(домен2==»вызов»)
sendToUrl =”/action.aspx?id=2”;
иначе, если(domain2==»walkwith»)
sendToUrl =»/walk.aspx»;
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
}
При настройке правил в web.config нужно сделать следующее
<Правило Рерайтера>
<LookFor>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+) используется для сопоставления любой строки. Здесь в test.aspx можно написать что угодно, потому что мы его вообще не используем.
У меня есть много сайтов с неопределенными доменными именами второго уровня, но страницы каждого сайта определяются. Содержимое каждого сайта с доменными именами второго уровня фактически извлекается из базы данных на основе разных идентификаторов.
Ситуация такая
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 Like.kerry.com/walk.aspx
Пройти сейчас При подъеме параметр id не отображается и меняется на имя домена второго уровня. Что мне в это время делать?
Сначала настройте правила.
<Правило Рерайтера>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
Затем обработайте это вот так в программе
//Получаем доменное имя второго уровня
строка [] UserHost = app.Request.Url.Host.Split (new Char [] { '.' });
строка домен2 = UserHost [0];
Получите разные цифры в зависимости от доменного имени
int id=getIDfromDomain(domain2);
//Получаем основной URL для перенаправления
строка sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
//Добавляем параметр идентификатора
если (идентификатор>0)
sendToUrl=string.Format( "{0}?id={1}", sendToUrl, id);
еще
sendToUrl="error.aspx";
//Переписываем
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Я искал в Интернете и нашел другое решение...
Возможно, вы имеете в виду эту статью
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
Как видите, основные методы одинаковы. Причина, по которой это не указано вверху, заключается в том, что этот подход немного сложен и его может быть нелегко понять поначалу. Но я верю, что друзья, которые видели. это в конце. Прочтение этой статьи еще раз, вероятно, заставит вас понимающе улыбнуться.
Приятного программирования
Заключительный ps: я планировал опубликовать эту статью через несколько дней, но только сейчас случайно удалил из VSS все программы, написанные за последние несколько дней. Это все равно был полный тип. Еще раз сильно презираю эту фигню. менеджер исходного кода, созданный Microsoft-_ -