在 DotNetNuke 站点中,如何绕过 404 错误?
In a DotNetNuke site how do I bypass a 404 error?
我有一个站点 -- 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 页面时调试我的模块,看到一切正常,但没有显示最终结果。
有什么想法吗?
对于这样的事情,我建议使用 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。
我用不同的方法解决了这个问题。
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 也不起作用。
最终,我试图阻止 google 看到 404 错误,除非我想要它。这似乎奏效了。
我有一个站点 -- 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 页面时调试我的模块,看到一切正常,但没有显示最终结果。
有什么想法吗?
对于这样的事情,我建议使用 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。
我用不同的方法解决了这个问题。
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 也不起作用。
最终,我试图阻止 google 看到 404 错误,除非我想要它。这似乎奏效了。