在DotNetNuke网站中,如何绕过404错误?

时间:2018-06-09 16:30:59

标签: http-status-code-404 dotnetnuke

我有一个网站 - example.com。它有静态页面 - example.com/signup,example.com/faq等。

但是,我希望能够拥有“example.com/some-search-term”。当然,没有页面“some-search-term”。

我尝试在404错误页面上安装自定义模块,该模块将获取查询字符串并根据该搜索条件显示一些信息。但是,我仍然收到404错误“HTTP404:未找到 - 服务器未找到与请求的URI(统一资源标识符)匹配的任何内容。 GET - http://example.com/some-search-term。“并且页面是空白的。

我可以在触发404页面时调试我的模块,看看一切正常,但最终结果不会显示。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

对于类似的内容,我建议使用IIS重写规则或重写映射。您可以通过web.config或web.config指向的单独文件来执行此操作。如果您为每个字词设置了重定向,那么您就可以了。

EG:Web.config

<rewrite>
  <rewriteMaps configSource="fmrewrites.config" />
  <rules configSource="fmrules.config" />
</rewrite>

fmrewrites.congig

<?xml version="1.0" encoding="utf-8"?>
<rewriteMaps>
  <rewriteMap name="FmRedirects">
    <add key="www.siteexample.com/," value="https://www.siteexample.com/" />
  </rewriteMap>
</rewriteMaps>

或在fmrules.config

<?xml version="1.0" encoding="utf-8"?>
<rules>
    <clear />
    <rule name="FmRewrites" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
            <add input="{FmRedirects:{HTTP_HOST}{REQUEST_URI}}" pattern="(.+)" ignoreCase="true" />
        </conditions>
        <action type="Redirect" url="{C:1}" appendQueryString="false" />
    </rule>
</rules>

您可以阅读很多via MS Docs

答案 1 :(得分:0)

我用不同的方式解决了这个问题。

DNN提供默认的404页面。我只是添加了一个自定义模块,用于评估Page_Load()上的状态代码:

        _rcode = Response.StatusCode;
        if (_rcode == 404) //we're on our 404 page
        {
            Response.Clear();
            Server.ClearError();
        }

然后,模块对查询字符串执行一些数据库查找,以查看是否存在任何匹配项。如果有,它会重定向到适当的页面。如果没有匹配,那么我生成404错误。

我试图将所有内容保留在404页面上,但我不能。由于页面“example.com/some-search-term”实际上并不存在,因此某些页面组件不可用 - IsPostBack,ViewState,Session等 - 因此很难生成有效的页面。甚至将Response.StatusCode设置为200也不起作用。

最终,我试图阻止谷歌看到404错误,除非我想要它。这似乎有效。