Urlrewrite в asp.net - PullRequest
       28

Urlrewrite в asp.net

2 голосов
/ 08 июня 2011

В настоящее время я использую модуль перезаписи 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 ]

1 голос
/ 17 августа 2011

Вы можете сделать так, как вы предлагаете в своем вопросе - перенаправить все запросы на один 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/.

0 голосов
/ 08 июня 2011

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

/ news

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

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

...