【问题标题】:HTML5 PushState Regex IssueHTML5 PushState 正则表达式问题
【发布时间】:2012-04-11 16:16:18
【问题描述】:

我一直在为我正在进行的项目尝试 Backbone,但我一直无法让 Backbone 的“pushState”按我的意愿运行。

我有一个由 4 个视图和一个路由器组成的简单项目。如果在这种情况下很重要,我将通过元素的 id 进行路由。当我转到其中一个视图的哈希 (http://example.com/backbonetest/#step1) 时,它会正确显示,并且 URL 已更改。这是我希望在这里发生的事情,但是当我尝试导航到没有哈希的同一事物时,问题就来了(http://example.com/backbonetest/step1)。我在服务器 (IIS) 上收到 404,这是意料之中的,因为该页面不存在。

我整天都在尝试为 IIS 编写一个正则表达式,它会捕获并重写 url,删除 url 末尾的片段,以便正确提供页面。我宁愿简单地重写 url 而不是拥有同名的物理文件,因为页面的内容将动态生成,并且无论如何都需要脚本来获取内容。

我遇到的问题可能与我需要如何在文件系统上构建文件夹/脚本/样式有关。我希望能够将整个示例包含在 /backbonetest/ 文件夹中。对于脚本,'backbonetest/scripts' 等等。

我列出了我一直在测试我的正则表达式的 URL,以及我一直试图达到的结果:

输入输出: 2 a2 ab2 ab22 第2步 脚本.js 脚本.js 脚本/脚本/ 555/东西 555/东西 脚本/script.js 脚本/script.js

编辑: 我发现使用的 url 不包含前面的斜杠, 这就是为什么 Qtax 的解决方案在 IIS 中不起作用的原因。新的输入结构如上所示。

'/555/stuff' url 我希望 404 正常。如果没有定义除当前子目录之外的子目录,并且 url 没有引用显式文件(例如带有扩展名的文件),我只想重写 url。

我整天都在网上搜索这个问题的解决方案,并尝试使用正则表达式,但没有设法为我的问题找到合适的解决方案。在任何地方都没有找到任何东西之后,我想我一定是看错了……

谁能帮帮我?

【问题讨论】:

  • 不了解 IIS,但您可以使用的正则表达式重写是 ^/[^./]+$/
  • 这与我的测试数据以及 IIS 管理器中的测试人员完美配合,但由于某种原因,URL 要么没有被正确捕获,要么被重写到错误的位置。
  • 我发现我在这里给出的输入并不是 IIS 用于重写规则的内容,解释了它为什么不起作用。我必须对 Qtax 的建议表达式进行哪些更改才能使其适用于新的输入字符串?

标签: regex html iis pushstate


【解决方案1】:

经过多次头部/桌面撞击后,我想出了解决方案。它引起的所有大惊小怪都非常简单:

^[^\./]+$

基本上:

如果 url 不包含 '/' 或 '.' 则替换任何地方。

现在这应该是任何使用具有 Backbone 和 HTML5 推送状态的 IIS 的人的解决方案。只需将其弹出到应用根目录的 web.config 中,并将重写操作更改为“.”,它应该就可以工作了。

【讨论】:

    【解决方案2】:

    这让我整个上午都精神崩溃了!

    我已经添加到这个 - 在我的场景中,我有一个位于 API 虚拟目录中的 API 项目(以消除对 CORS 的需要) - 我显然不想重写任何 PAI 调用,所以我重写了我的如下 - 如果需要,您可以对您的 API URL 执行类似操作...

          <rule name="Handle PushState">
            <match url="^[^\./]+[^\./api]+(.*)$" />
            <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            </conditions>
            <action type="Rewrite" url="." />
          </rule>
    

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多