【问题标题】:MVC3 gives Page Not Found error when the ID part of the route contains a full stop当路由的 ID 部分包含句号时,MVC3 给出 Page Not Found 错误
【发布时间】:2011-10-21 14:19:43
【问题描述】:

我已经在 ASP.NET MVC3 中创建了一个基于目录的站点,当您浏览该站点时,您会进入一个类似 http://server/domains/details/mydomain.coop 的页面。

网站的其余部分工作正常,但是当您转到此网址时,您会收到一个找不到页面的错误。我已经登录到控制器并且控制器中的操作没有被触发。它在我的本地机器(VS2010 / W7)上运行良好,但是当它放到实时服务器(MS 2003 服务器 IIS6)上时它会中断。

如果网址不包含“.”在最终的域名部分(通过默认路由上的可选参数“id”传递的位然后一切正常。

有没有人知道我可以做什么,因为我真的想要“。”在 SEO 的 id 部分中

非常感谢

乔纳森

【问题讨论】:

  • 这与 MVC3 路由有关...您必须创建一个特殊的路由。为了帮助您,我们需要更多详细信息。 mydomain.coop 是静态的吗?或者你的意思是什么。合作?完整的网址也是如此,是针对特定的控制器/动作组合还是针对任何?魔鬼在细节中......
  • 上面的例子是不工作的网址之一。如果我输入“server/domains/details/mydomain-coop”,它会起作用。我已尝试更改控制器和操作,但仍然失败。

标签: asp.net-mvc-3 http-status-code-404


【解决方案1】:

您可以使用- 将您的网址设为http://server/domains/details/mydomain-coop。我不确定 SEO 的影响,但我无法想象它比 . 更好或更差

【讨论】:

    【解决方案2】:

    句点和其他标点符号在 URL 中具有非常特殊的含义——在这种情况下,它表示文件扩展名,用于确定激活哪些 IIS 模块和过滤器(我总是把这两个混淆)来处理请求。

    您应该真的三思而后行以这种方式格式化您的网址;像这样的非标准用途不是你的朋友。

    猜想: 搜索引擎可能会使用. 之后的部分来确定 MIME 类型,如果它与实际页面内容不匹配,则可能会标记您的分数,或者它可能会完全忽略该链接。请注意,例如,Google 会根据文件扩展名和 MIME 类型对图像和页面进行不同的索引(尽管更精通 Google 内部黑魔法的人可能会提出更好/更准确的解释。)

    Here's a nice post 让 ASP.NET 忽略某些文件扩展名,

    See also this SO question about a similar issue(注册自定义文件扩展名 - 在本例中为 .coop

    第二个链接中重要的web.config 条目是:

    <httpHandlers> 
    ... 
    <add verb="*" path="*.mycustomextension"> type="System.Web.UI.PageHandlerFactory"/> 
    
    <compilation > 
          <buildProviders> 
              <add extension=".mycustomextension" type="System.Web.Compilation.PageBuildProvider" />  
          </buildProviders> 
    

    我没有时间对此进行测试,但希望它能让你朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2020-09-14
      • 2023-03-20
      • 2012-09-05
      • 2020-02-29
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多