0

我们的 DNN 网站正在重写我们的产品 SKU,它是从产品过滤器页面导航到详细产品视图页面时查询字符串的一部分。

不幸的是,我们的一些产品在 SKU 中有正斜杠,例如BD0002/DSDS

我们导航到的 URL 是https://dnndev.me/Product-View/sku/BD0002/DSDS,但 DNN 会截断并重写 URL 的最后一部分,并会导致以下 URL:https:// dnndev.me/Product-View/sku/BD0002

我确实尝试在 DNN 的 SEO 设置部分添加以下正则表达式代码以忽略页面的重写,但它的作用相同。

sku/(.*)/(.*)

我还注意到,目前我们的网站编写的 sku 没有查询字符串的 = 符号。目前它将是/sku/而不是?sku=我发现我可以在添加 |/sku| 时更改它 在保留在查询字符串正则表达式中。

我在 web.config 文件中将 URL 格式设置为高级。我不想将其更改为 HumanFriendly,因为它破坏了我们的模块。

在此处输入图像描述

我们的产品过滤器页面包含指向产品视图的链接,它使用带有 HttpUtility.UrlEncode 的小胡子模板用于 QueryStringSKU:

<a href='<%=DetailedPageRedirectLink%>/sku/{{QueryStringSKU}}'>More Info</a>

然后,我们有一个详细的产品视图模块来侦听 QueryString。我过去曾尝试使用编码和解码,但 DNN 做自己的事情并忽略了编码和解码部分,所以我编写了这段疯狂的代码部分,去除了不属于 SKU 的部分 URL。

string rawurlfromrequest = Request.RawUrl;
string checkifquerystringexist = Request.QueryString["sku"];
if(checkifquerystringexist != null)
 {
 var cleanSKU = rawurlfromrequest.Split(new[] { "sku/" }, StringSplitOptions.None)[1];
 decodeprodCode = cleanSKU.Split(new[] { "&" }, StringSplitOptions.None)[0];
 decodeprodCode = decodeprodCode.Split(new[] { "/search" }, StringSplitOptions.None)[0];
 decodeprodCode = decodeprodCode.Split(new[] { "?fbclid=" }, StringSplitOptions.None)[0];
 decodeSKU = HttpUtility.UrlDecode(decodeprodCode);
 }

if (!string.IsNullOrWhiteSpace(decodeSKU) && IsEditable == false)
{
LoadProductDetails(decodeSKU);
}

所以我想知道,当查询字符串包含正斜杠时,如何只允许 DNN 重写 URL 的第一部分而不是查询字符串的 SKU 部分?

我找到了这些链接: https ://www.dnnsoftware.com/answers/disable-friendly-url-for-one-page

https://www.dnnsoftware.com/forums/threadid/542568/scope/posts/how-can-one-turn-off-friendly-urls-url-rewriting-etc-in-dnn-8

4

1 回答 1

0

我不得不转义查询字符串,用uri.EscapedDataString()它将转换/%2FVDWWD 提到的。

我还发现一些产品在 SKU 中包含一个空格,这让我决定使用 EscapedDataString 将空格转换为%20.

我发现这个表在这篇文章中具有不同的编码方法很有用: URL Encoding using C#

由于某种原因,Request.Querystring['sku'] 会获取未编码的查询字符串,即使它已在 URL 中编码。这就是我使用Request.RawUrl并从中剥离查询字符串的原因。

于 2019-02-19T07:33:37.597 回答