【问题标题】:Urlrewrite in asp.net在 asp.net 中的 Urlrewrite
【发布时间】:2011-06-08 18:22:47
【问题描述】:

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

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

我不想在 url 中添加扩展名。

我有 index.aspx、news.aspx、artist.aspx、lesson.aspx 之类的页面... >

< 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

希望这有帮助。

【问题讨论】:

    标签: asp.net url-rewriting urlrewriter.net


    【解决方案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 重写规则的更多信息。

    【讨论】:

      【解决方案2】:

      [编辑] 好的,所以对于你要问的......据我所知,你确实需要为每个页面创建一个特定的重写规则。我更多地沿着 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 页面,用于显示控制器传递给它的数据)。

      【讨论】:

      • 感谢您的回复,我已经更新了我的问题,请看看
      • 已编辑帖子。不幸的是,不知道如何在不单独重写的情况下进行精确配置。
      • 您能否详细说明您对 MVC 的要求,它路由到 default.aspx 并调用 NewsController.Index 并在 default.aspx 上显示新闻页面
      • 或者您是否知道在运行时以上述相同格式在单独的文件中添加重写规则并将该文件附加到 web.config 文件中
      • 尽可能多地添加了关于 MVC 的解释,并提供了将所有页面重定向到索引的示例。如果可能或什至可取,我不知道如何在运行时制定规则。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 2011-05-06
      • 2021-04-21
      相关资源
      最近更新 更多