Urlrewrite в asp.net

#asp.net #url-rewriting #urlrewriter.net

#asp.net #url-перезапись #urlrewriter.net

Вопрос:

в настоящее время я использую модуль перезаписи URL-адресов IIS7, но основная лазейка в использовании модуля перезаписи URL-адресов IIS7 заключается в том, что я должен написать правило для всей страницы, которую я хочу использовать на веб-сайте, я хочу использовать правило comman и перенаправить его на определенную страницу (скажем, домашнюю страницу) и, используя global.asax, я могу перенаправить его на нужную страницу…

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

я не хочу расширения в URL.

у меня есть страницы типа index.aspx, news.aspx, artists.aspx, lessons.aspx … мне нужны URL-адреса типа index, news, lessons, artists, я создал правило в web.config, например

 < rewrite>  
 < rules>  
   < rule name="urlType1">  
     < match url="^(w*)" />  
     < action type="Rewrite" url="default.aspx" appendQueryString="false" />  
   < /rule>  
 < /rules>  
< /rewrite>  
  

это переведет любую страницу в default.aspx, а затем, используя rawUrl в global.asax, я проверяю страницу, например, если пользователь ввел «новости», тогда я переписываю в news.aspx

Надеюсь, это помогло.

Ответ №1:

Вы можете поступить так же, как вы предлагаете в своем вопросе — перенаправить все запросы на один URL: И затем в вашем Global.asax вы могли бы вызвать Server.Передача ( «~/file1.aspx») для пересылки запроса к определенному файлу.

Или вы могли бы выполнить передачу непосредственно из вашего правила перезаписи URL и пропустить дальнейшую обработку в вашем глобальном файле.asax. Например, это правило будет считывать входящий URL, у которого нет расширения файла, а затем перенаправлять запрос на файл с расширением файла:

         <rule name="Append a file extension to all requests discard querystring" stopProcessing="true">
            <match url="^(.*)?" />
            <action type="Rewrite" url="{R:1}.aspx" />
        </rule>
  

Подробнее о правилах перезаписи URL-адресов читайте в блоге Руслана Якушева по адресуhttp://ruslany.net /.

Ответ №2:

[РЕДАКТИРОВАТЬ] Хорошо, итак, для чего вы asking…as насколько я знаю, вам действительно нужно создать определенное правило перезаписи для каждой страницы. Я больше думал о MVC, где, когда вы переходите к:

/новости

он направляет к

/default.aspx

который вызывает NewsController.Индексирует и отображает страницу новостей из default.aspx. Однако, чтобы фактически разбить все на отдельные страницы и просто попытаться удалить extension…as насколько я знаю, вам нужно создать новое правило для каждого экземпляра.

Правила перенаправления могут быть настроены из файлов web.config.

Например, вот что WordPress делает в файле web.config, который входит в состав WordPress:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
                <rule name="wordpress" patternSyntax="Wildcard">
                    <match url="*"/>
                        <conditions>
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                        </conditions>
                    <action type="Rewrite" url="index.php"/>
                </rule></rules>
    </rewrite>
  </system.webServer>
</configuration>
  

Направляет ВЕСЬ трафик на index.php страница. The index.php затем файл считывает URL-адрес и выдает данные на основе URL-адреса. Это не перенаправляет его на другую страницу после перенаправления, это — скорее — решает, какой контент отображать.

MVC работает по принципу, вы видите этот url:

 /news         > will call > NewsController.Index();
/news/index   > will call > NewsController.Index();
/news/view    > will call > NewsController.View();
/news/read/id > will call > NewsController.Read(id);
  

Затем эти контроллеры обычно получают данные из базы данных и применяют данные к «Представлению» (html-страница, которая находится где-то на сервере с переменными для отображения данных, которые контроллер передает ему).

Комментарии:

1. спасибо за ваш ответ, я обновил свой вопрос, пожалуйста, взгляните

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

3. можете ли вы уточнить, что вы просили для MVC, который перенаправляет на default.aspx и вызывает NewsController. Индексирует и отображает страницу новостей в формате default.aspx

4. или у вас есть какая-либо идея добавить правило перезаписи во время выполнения в том же формате, что и выше, в отдельный файл и прикрепить этот файл в файле web.config

5. добавил объяснение о MVC, насколько смог, с примером перенаправления всех страниц для индексации. Я не знаю, как создавать правила во время выполнения, если это возможно или даже целесообразно.