Как я могу перенаправить и изменить URL-адреса без расширений через ASP.NET?

Мы переработали структуру веб-сайта, на котором есть несколько бизнес-подразделений. Теперь я хочу перенаправить (301) на новую страницу.

IE:
было www.example.com/abc
теперь www.example.com/default.aspx?article=abc

Я попытался использовать Global.asax для этого, и он работает правильно, когда я отлаживаю его.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

Таким образом, http: // локальный: 1234 / пример / abc перенаправляет правильно, но (где 1234 - порт для сервера отладки)
http: // локальный / пример / abc не перенаправляет, дает мне 404.

Есть идеи?


Дополнительная информация: Если я перейду к http: //localhost/example/abc/default.aspx, он правильно перенаправит.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
3 074
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы убедились, что файлы web.config одинаковы для каждого веб-сайта (при условии, что 1234 отличается от 80)

Кроме того, вы пробовали localhost: 80?

Вы сейчас тестируете сайт на веб-сервере Visual Studio? Обычно это запускает сайт на «localhost: nnnnn», где «nnnnn» - это номер порта (как указано выше, 1234), он не запускает его без него.

Если на вашем компьютере установлен IIS, опубликуйте на нем свой проект, и вы сможете убедиться, что он работает без "nnnnn", поскольку в вашем коде нет ничего, что могло бы заставить его не работать. Сделай так.

Возможно, вы хотите взглянуть на Маршрутизация.

Видеть:

Ответ принят как подходящий

Что ж, если порт указывает, что вы используете встроенный веб-сервер (тот, который поставляется с VS), это, вероятно, работает, потому что всегда направляет запросы через платформу ASP.NET.

Запросы, заканчивающиеся на / abc, не будут автоматически маршрутизироваться через платформу ASP.NET, потому что IIS может «не знать», что вы хотите. Вам необходимо проверить настройки IIS, чтобы убедиться, что такие запросы направляются в aspnet_isapi.dll.


Обновлено: Для этого вам нужно добавить сопоставление с подстановочными знаками:

  1. В диспетчере IIS разверните локальный компьютер, разверните папку «Веб-сайты», щелкните правой кнопкой мыши нужный веб-сайт или виртуальный каталог и выберите «Свойства».
  2. Щелкните соответствующую вкладку: Домашний каталог, Виртуальный каталог или Каталог.
  3. В области параметров приложения щелкните Конфигурация, а затем щелкните вкладку Сопоставления.
  4. Чтобы установить карту приложения с подстановочными знаками, выполните следующие действия:
    • На вкладке «Сопоставления» нажмите «Добавить» или «Вставить».
    • Введите путь к DLL в текстовом поле «Исполняемый файл» или нажмите кнопку «Обзор», чтобы перейти к нему (например, dll ASP.NET 2.0 находится по адресу c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll на моем компьютере). машина)
    • Для расширения используйте ". *" Без кавычек, конечно.
    • Выберите, какие глаголы вы хотите искать (GET, HEAD, POST, DEBUG являются обычными для ASP.NET, вам решать)
    • Убедитесь, что выбран "Механизм сценария" или "Механизм приложения".
    • Снимите флажок "Проверить, существует ли файл".
    • Нажмите "ОК".

Возможно, я не согласен с этим, но, надеюсь, кто-нибудь поправит меня. :)

Как мне это правильно установить? Я смотрю на диалоговое окно «Добавить / изменить сопоставление расширений приложения».

Nathan Koop 23.09.2008 19:49

Ваш http: // локальный / пример / abc не вызывает Global.asax, как вы ожидаете. Обычно http: // localhost работает на порту 80 (: 80). Если вы хотите запустить свой сайт на 80-м порту, вам нужно будет развернуть свой сайт в IIS для запуска здесь.

Вам необходимо настроить отображение обработчика в IIS для пересылки всех неизвестных расширений на asp.net. Первый работает, потому что cassini обрабатывает все запросы, второй не работает, потому что IIS ищет этот каталог, а он не существует, вместо платформы .net, выполняющей код, который у вас есть.

Вот информация о том, как сделать Перезапись URL в asp.net.

Если возможно, я бы предложил использовать новый Маршрутизация запросов приложений или UrlRewrite.net

Вы должны использовать перенаправление подстановочного знака IIS, вам понадобится что-то вроде этого;

 *; www.example.com/*; www.example.com/default.aspx?article=$0

Есть разумная ссылка на Microsoft

Если вы используете Apache, я думаю, вам нужно изменить файл htaccess.

Это может быть лучший способ обрабатывать перенаправления вместо отображения всего через aspnet_isapi, если все, что вам нужно делать, это перенаправления. Существуют также плагины для IIS, которые работают как mod_rewrite в Apache, у меня нет веб-сайтов в голове, но они есть.

Bryan Rehbein 23.09.2008 20:15

IIS по умолчанию не передает все запросы в ASP.NET для обработки. Только некоторые расширения ресурсов, среди них aspx, будут переданы asp.net для обработки. Когда вы запрашиваете http: // локальный / пример / abc, IIS пытается найти каталог, чтобы узнать, есть ли у вас файл по умолчанию (например, default.aspx, index.html) для загрузки из этого каталога. Поскольку он не может найти каталог с мусорным тегом «abc» в нем, он никогда не находит файл default.aspx для загрузки.

Когда вы пытаетесь загрузить http: //localhost/example/abc/default.aspx, IIS видит расширение aspx и немедленно передает его среде выполнения ASP.NET для обработки. Причина, по которой запрос http: // локальный / пример / abc не загружается, заключается в том, что он никогда не передается в ASP.NET, поэтому, конечно, global.asax никогда его не видит.

Сайт, размещенный на Cassini, обрабатывает все запросы, поэтому этот вызов обрабатывается ASP.NET и файлом global.asax.

Я согласен с Дарреном Коппом, который предположил, что вам необходимо настроить сопоставление обработчиков в IIS для пересылки неизвестных расширений в ASP.NET.

Другие вопросы по теме