Urlrewrite в asp.net

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

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

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

у меня есть такие страницы, как index.aspx, news.aspx, Artist.aspx, уроков.aspx... я хочу URL-адреса, такие как индекс, новости, уроки, художники, я создал правило в 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.

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

2 ответа

Решение

Вы можете сделать так, как вы предлагаете в своем вопросе - перенаправить все запросы на один URL: а затем в вашем Global.asax вы можете вызвать Server.Transfer( "~/file1.aspx"), чтобы переслать запрос конкретный файл.

Или вы можете перейти непосредственно из правила перезаписи URL-адреса и пропустить дальнейшую обработку в файле Global.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/.

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

/Новости

это маршруты в

/default.aspx

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

Правила перенаправления можно настроить в файлах 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. Затем файл 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-странице, которая находится где-то на сервере с переменными для отображения данных, которые контроллер передает ему).

Другие вопросы по тегам