DNN Перезапись и отключение Querystring, хотя у меня есть параметр Regex - PullRequest
0 голосов
/ 18 февраля 2019

Наш веб-сайт DNN переписывает наш SKU продукта, который является частью строки запроса при переходе от страницы фильтра продукта к странице подробного просмотра продукта.

К сожалению, некоторые из наших продуктов имеют косую черту в SKUнапример, BD0002 / DSDS

URL-адрес, на который мы переходим, - https://dnndev.me/Product-View/sku/BD0002/DSDS,, но DNN отключит и перезапишет последнюю часть URL-адреса и приведет к следующемуURL: https://dnndev.me/Product-View/sku/BD0002

Я попытался добавить следующий код Regex в раздел настроек SEO DNN, чтобы игнорировать переписывание страницы, но он делает то же самое.

sku/(.*)/(.*)

Я также заметил, что в настоящее время наш веб-сайт пишет sku без знака = для строки запроса.В настоящее время это будет / sku / , а не ? Sku = Я обнаружил, что могу изменить это, когда добавлю | / sku |в регулярном выражении Keep in Querystring.

В файле web.config я установил расширенный формат URL.Я не хочу менять это на HumanFriendly, поскольку это нарушает наш модуль.

enter image description here

Наша страница фильтра продуктов, которая содержит ссылки на использование Product View, используетшаблон усов с HttpUtility.UrlEncode для QueryStringSKU:

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

Затем у нас есть модуль подробного представления продукта, который прослушивает QueryString.В прошлом я пытался использовать кодирование и декодирование, но DNN делал свое дело и игнорировал часть кодирования и декодирования, поэтому я написал эту сумасшедшую часть кода, которая удаляет часть URL, которая не является частью SKU.

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

1 Ответ

0 голосов
/ 19 февраля 2019

Мне пришлось экранировать строку запроса с помощью uri.EscapedDataString(), которая преобразует / в %2F, как указано в VDWWD.

Я также обнаружил, что некоторые продукты содержат пробел в SKU, что заставило меня принять решение использовать EscapedDataString, который преобразует пробел в %20.

Я нашел эту таблицу с различными методами кодированияна этот пост полезно: Кодирование URL с использованием C #

По какой-то причине Request.Querystring ['sku'] извлекает незашифрованную строку запроса, даже если она закодирована в URL.Вот почему я использую Request.RawUrl и удаляю строку запроса из этого.

...