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