#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 /…