2

我目前正在使用 IIS7 的 Url Re-write 模块,但是使用 IIS7 的 url re-write 模块的主要漏洞是我必须为所有页面编写规则,我想在网站上使用,我想使用一条命令规则并将其重定向到特定页面(例如主页)并使用 global.asax 我可以将其重定向到所需页面...

是否可以重写 url,或者是否有任何可用的工具可以用于此目的,或者可以帮助我执行此操作的代码示例。

我不想在 url 中扩展。

我有 index.aspx、news.aspx、artist.aspx、lessons.aspx 之类的页面...我想要索引、新闻、课程、​​艺术家之类的网址,我在 web.config 中创建了一个规则,例如

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

这会将任何页面登陆到default.aspx,然后在global.asax中使用rawUrl,我正在检查页面,就像用户输入“新闻”然后我重写到news.aspx

希望这有帮助。

4

2 回答 2

1

您可以按照您在问题中的建议进行操作-将所有请求重定向到单个 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>

在 Ruslan Yakushev 的博客http://ruslany.net/上阅读有关 URL 重写规则的更多信息。

于 2011-08-17T05:59:27.300 回答
-1

[编辑] 好的,所以对于你的要求......据我所知,你确实需要为每个页面创建一个特定的重写规则。我更多地沿着 MVC 的思路思考,当你去哪里时:

/消息

它路由到

/default.aspx

它调用 NewsController.Index 并显示来自 default.aspx 的新闻页面。但是,实际上要将所有内容分解为单独的页面并尝试删除扩展名……据我所知,您必须为每个实例创建一个新规则。

可以从 web.config 文件配置重定向规则。

例如,这是 WordPress 在 WordPress 包含的 web.config 文件中所做的:

<?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 页面,以显示控制器传递给它的数据)。

于 2011-06-08T18:25:47.970 回答