Вопрос

На некоторых сайтах, управляемых .NET, URL-адреса не заканчиваются на asp.net имена страниц, такие как default.aspx, вместо этого они используют шаблон http://sitename.com или http://sitename.com/subdirectory/subdirectory.Сайт отображается как подкаталоги вне корневого каталога, т.е./tags, /users, /badges, URL-адресами будут /tags, /users, /badges соответственно.

Stack Overflow, если использовать конкретный пример, использует URL-адреса вопросов вида Как получить чистые URL-адреса, такие как Stackoverflow?.Это отличный способ оптимизировать страницу для поисковых систем.

Реализовано ли это с помощью HTTP-обработчиков?Фильтруется ли запрос GET на основе path, и весь ответ формируется в самом обработчике на основе идентификатора вопроса?Кто-нибудь еще хочет порассуждать?

Это было полезно?

Решение

Это ASP.Net MVC, в котором более или менее встроена .Net Routing. Маршрутизация доступна и для не MVC проектов, хотя

http://msdn.microsoft.com/en-us/library/ cc668201.aspx

Это просто .dll, которую вы можете поместить в папку bin. В основном он использует регулярные выражения для сопоставления ваших URL со страницами / шаблонами.

Другие советы

Это достигается с помощью mod_rewrite в Apache или аналогичных методов url_rewriting в IIS .

Примечание. SOFlow использует последнее.

URL-адреса имеют такой формат в соответствии с принципами REST , в которых все является ресурсом с уникальный URL.

Мне кажется, я где-то читал в блоге, что это достигается с помощью ASP.NET MVC framework .

Я знаю, что переполнение стека использует инфраструктуру ASP.NET MVC, которая, предположительно, имеет встроенную систему перезаписи URL. Для систем, отличных от Windows, Apache mod_rewrite очень распространен.

Например, запрос на странице вики: http://server.com/wiki/Main_Page обрабатывается веб-сервером. Он переведен в /wiki/index.php?page=Main_Page

Вот пример перезаписи URL в Apache:

RewriteEngine on
RewriteRule ^forum-([0-9]+)\.html$ forumdisplay.php?fid=$1 [L,QSA]
RewriteRule ^forum-([0-9]+)-page-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2 [L,QSA]

RewriteRule ^thread-([0-9]+)\.html$ showthread.php?tid=$1 [L,QSA]
RewriteRule ^thread-([0-9]+)-page-([0-9]+)\.html$ showthread.php?tid=$1&page=$2 [L,QSA]

Это говорит о том, что URL-адрес, который входит, - forum - ##. html , а затем обрабатывает этот запрос, как если бы он был forumdisplay.php? fid = ## , То же самое касается правил thread - ##. Html .

Вы можете сделать это в ASP.net, используя Context.RewritePath.

В Глобальный.asax, создать Заявка.Начать запрос обработчик событий.

Например, если вы хотите отправлять запросы на

example.com/questions

фактически возвращает результаты из

example.com/Questions/Default.aspx

Глобальный.asax:

<%@ Application Language="C#" %>
<script runat="server">

   void Application_BeginRequest(Object sender, EventArgs e)
   {
       string originalPath = HttpContext.Current.Request.Path.ToLower();

       if (originalPath.Contains("/questions"))
       {
           String newPath = originalPath.Replace("/questions", "/Questions/Questions.aspx");
           Context.RewritePath(newPath);
       }
    }
</script>

Если на вашем веб-сайте запущено что-либо до .NET Framework 4, вам придется вручную включить runAllManagedModulesForAllRequests в web.config, в противном случае Начальный запрос событие не будет запущено:

<configuration>
...
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
   </system.webServer>
</configuration>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top