Маскировка URL в .Net / HTML

#html #vb.net #url-rewriting

#HTML #vb.net #переписывание URL

Вопрос:

У меня есть веб-сайт, на котором у меня есть много категорий, много подкатегорий внутри каждой и много продуктов внутри каждой из них. Поскольку URL-адреса очень недружелюбны к пользователю (они содержат GUID !!!), я хотел бы использовать метод, который, я думаю, называется маскировкой URL. Например, вместо перехода в catalogue.aspx?ItemId=12343435323434243534, они бы отправились в notpads.htm . Это будет отображаться так же, как переход в catalogue.aspx?ItemId=12343435323434243534 каким-то образом отображался бы.

Я знаю, что мог бы сделать это, создав файл для каждой категории / подкатегории (отдельные продукты не могут быть доступны по отдельности, поскольку это оптовый сайт — клиенты не могут совершать покупки непосредственно с сайта). Это потребовало бы много работы, поскольку серверу пришлось бы обновлять каждый соответствующий файл всякий раз, когда изменяется видимость категории / подкатегории / продукта или изменяется описание, меняется название… вы поняли идею…

Я пробовал использовать серверные включения, но мне не нравится, когда файл .aspx указан в файле html.

Я также пробовал использовать iframe, установленный на 100% ширины / высоты и абсолютно расположенный слева 0 и сверху 0. Это работает довольно хорошо, но я знаю, что есть причины, по которым вам не следует использовать этот метод, например, некоторые поисковые системы плохо с этим справляются. Я также замечаю, что заголовок «родительской» страницы (notepads.htm ) не является заголовком, установленным в iframe (логически это правильно, но еще одна проблема, которую мне нужно решить, если я продолжу использовать этот метод).

Кто-нибудь может предложить другой способ, которым я мог бы это сделать, или сказать мне, правильно ли я поступаю, используя iframes? Спасибо.

С уважением,

Ричард

PS Если это неправильное название для того, что я пытаюсь сделать, то, пожалуйста, дайте мне знать, что это на самом деле, чтобы я мог переименовать / переназначить его.

Комментарии:

1. Вам следует изучить возможность перезаписи URL ( addedbytes.com/for-beginners/url-rewriting-for-beginners ). Точные детали будут отличаться в зависимости от используемого вами веб-сервера (IIS, Apache и т.д.). PS — Я обновил ваши теги, чтобы включить это ключевое слово. Кроме того, это действительно не имеет ничего общего с html или vb.net .

2. что бы вы ни делали, НЕ используйте IFrames!

3. Спасибо. Я вставил HTML и VB. Чистая, потому что сайт создан на VB. Мы с Net хотели использовать HTML-страницы для отображения содержимого .aspx-страниц.

4. @Cheeso: Раньше я работал в Совете, где было строго запрещено использовать iFrames; вот почему я задал этот вопрос. Если бы не эта работа, я бы подумал, что нашел решение, и не стал бы искать дальше..

Ответ №1:

Посмотрите на перезапись URL. Вы можете создать регулярное выражение и сопоставить его с вашим истинным URL. Например

 http://mysite.com?product=banana 
  

может отображаться на

 http://mysite.com?guid=lakjdsflkajkfj3lj3l4923892amp;asfd=9234983920894893
  

Комментарии:

1. Спасибо, но я не уверен, что у меня есть доступ к IIS на сервере — я полагаю, поскольку он общий, мы не можем выполнять простые (и очень полезные) вещи, подобные этому, и получать доступ к базам данных, основанным на сервере, непосредственно из SQL Server 2005 Management Studio… Я серьезно обсуждаю переход на выделенный хостинг…

2. Если подумать, это увеличило бы затраты на 10…. может быть, и нет — по крайней мере, пока в любом случае.

3. Если ваш хост использует IIS7, то правила перезаписи будут сохранены в web.config, к которому у вас должен быть доступ. Вы можете попросить их включить это. Если они используют IIS6, то они могут установить модуль перезаписи IIRF, и вы сможете редактировать iirf.txt файл со всеми вашими правилами. Я думаю, что большинство хостов, даже совместно используемых, предложили бы эту функцию. Используется многими приложениями CMS.

4. Спасибо. Я должен был подумать об этом раньше, но этот момент вылетел у меня из головы. Я заметил, что все это было в web.config некоторое время назад, когда я использовал модуль для другого сайта. Еще одна вещь, которую я замечаю, немного подумав об этом, заключается в том, что имена и значения связаны в базе данных. Я бы хотел notepads.htm чтобы связать с catalogue.aspx? ItemId=1234567890. Если я не ошибаюсь, для этого потребуется некоторый серверный код для сопоставления двух (если только нет другого способа, о котором я не подумал). Есть ли способ сделать это с помощью модуля? Если это так, то это было бы идеально.

5. Не совсем уверен, о чем вы спрашиваете. Есть ли у вас catalogue.aspx? ItemId=123456890 и он точно соответствует notepads.htm тогда у вас было бы правило, которое сопоставляет один к одному. Вы бы создали отдельное правило для каждой страницы. Если бы у вас было что-то более общее, например catalogue.aspx?cat=4009320amp;size = 849302, где cat и size соответствуют словам «обувь» и «32 см», тогда у вас могло бы быть правило, по которому пользователь вводит catalogue.aspx?cat=shoes amp; size42cm и получает ту же страницу. Затем это будет повторено для других похожих страниц, скажем, для обуви других размеров.

Ответ №2:

Я полагаю, вы имеете в виду переписывание URL.

В IIS 7 встроен модуль перезаписи, который вы можете использовать для такого рода задач.

Ответ №3:

Средства перезаписи URL решают проблему, которую вы описываете — Когда кто-то запрашивает страницу A, отображает страницу B — в общем виде.

Но ваше требование не является общим. Похоже, у вас есть конечное требование к сопоставлению uuid с shortname. Это то, что вы могли бы или должны настроить в своем приложении самостоятельно, вместо того, чтобы вставлять новый механизм в свою систему.

На странице default .aspx вы бы просто выполнили поиск по короткому имени из URL-адреса в постоянной таблице, хранящейся где-либо, а затем вызвали Server.Передача () на страницу с именем uuid, связанную с этим коротким именем.

Это должно быть легко создать прототип.

Комментарии:

1. Спасибо, Чизо. Я изучаю это, но для этого потребовалось бы создавать новую страницу каждый раз, когда создается категория / подкатегория; следовательно, использование серверного кода на этой новой странице означало бы перекомпиляцию приложения, верно? Или я ошибаюсь?

2. нет, новая страница для каждого нового UUID — это не то, что я себе представляю. Попробуйте эту статью: msdn.microsoft.com/en-us/library /…