Как я могу перенаправить и изменить URL-адреса без расширений через ASP.NET?
-
02-07-2019 - |
Вопрос
Мы изменили структуру сайта, в котором есть несколько бизнес-подразделений.Теперь я хочу перенаправить (301) на новую страницу.
ИЕ:
был 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://localhost:1234/пример/abc перенаправляется правильно, но (где 1234 — порт сервера отладки)
http://localhost/пример/abc не перенаправляет, выдает 404.
Есть идеи?
Дополнительная информация:Если я пойду в http://localhost/example/abc/default.aspx тогда он перенаправляется правильно.
Решение
Что ж, если порт указывает, что вы используете встроенный веб-сервер (тот, который поставляется с VS), это, вероятно, работает, потому что это всегда маршрутизирует запросы через платформу ASP.NET.
Запросы, заканчивающиеся на /abc, не будут автоматически маршрутизироваться через платформу ASP.NET, поскольку IIS может «не знать», что вы этого хотите.Вам необходимо проверить настройки IIS, чтобы убедиться, что такие запросы направляются в aspnet_isapi.dll.
РЕДАКТИРОВАТЬ: Для этого вам необходимо добавить сопоставление подстановочных знаков:
- В диспетчере IIS разверните локальный компьютер, разверните папку «Веб-сайты», щелкните правой кнопкой мыши нужный веб-сайт или виртуальный каталог и выберите «Свойства».
- Нажмите соответствующую вкладку:Домашний каталог, виртуальный каталог или каталог.
- В области «Настройки приложения» нажмите «Конфигурация», а затем перейдите на вкладку «Сопоставления».
- Чтобы установить карту приложения с подстановочными знаками, выполните следующие действия:
- На вкладке «Сопоставления» нажмите «Добавить» или «Вставить».
- Введите путь к DLL в текстовом поле «Исполняемый файл» или нажмите «Обзор», чтобы перейти к нему (например, DLL ASP.NET 2.0 находится по адресу c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll на моем компьютере). машина)
- Для расширения используйте ".*", конечно, без кавычек.
- Выберите, какие команды вы хотите искать (GET, HEAD, POST, DEBUG являются обычными для ASP.NET, вы решаете)
- Убедитесь, что выбран «Механизм сценариев» или «Механизм приложений».
- Снимите флажок «Проверить, что файл существует».
- Нажмите «ОК».
Возможно, я ошибаюсь, но если это так, то, надеюсь, кто-нибудь меня поправит.:)
Другие советы
Вам следует использовать перенаправление подстановочных знаков IIS, вам понадобится что-то вроде этого;
*; www.example.com/*; www.example.com/default.aspx?article=$0
Есть разумная ссылка на Майкрософт
Если вы используете Apache, я думаю, вам нужно изменить файл htaccess.
Вы сейчас тестируете сайт на веб-сервере Visual Studio?Обычно при этом сайт запускается на «localhost:nnnnn», где «nnnnn» — это номер порта (как указано выше, 1234), он не позволяет ему работать без него.
Если на соответствующем компьютере установлен IIS, опубликуйте на нем свой проект, и вы сможете убедиться, что он работает без «nnnnn», поскольку в вашем коде нет ничего, что могло бы привести к его неработоспособности. Сделай так.
Удостоверились ли вы, что файлы web.config одинаковы для каждого веб-сайта (при условии, что: 1234 отличается от: 80)
Кроме того, вы пробовали localhost:80?
Возможно, вы захотите взглянуть на Маршрутизация.
Видеть:
Твой http://localhost/пример/abc не вызывает Global.asax, как вы ожидаете.Обычно http://локальный хост работает на порту 80 (:80).Если вы хотите запустить свой сайт через порт 80, вам нужно будет развернуть свой сайт в IIS, чтобы он работал здесь.
Вам необходимо настроить сопоставление обработчиков в IIS для пересылки всех неизвестных расширений в asp.net.Первый работает, потому что Cassini обрабатывает все запросы, второй не работает, потому что IIS ищет этот каталог, а он не существует, вместо того, чтобы инфраструктура .net запускала имеющийся у вас код.
Вот информация о том, как это сделать Переписывание URL-адресов в asp.net.
Если возможно, я бы предложил использовать новый Маршрутизация запросов приложений или UrlRewrite.net
IIS по умолчанию не передает все запросы на обработку ASP.NET.Только некоторые расширения ресурсов, в том числе «aspx», будут переданы для обработки asp.net.Что происходит, когда вы запрашиваете http://localhost/пример/abc заключается в том, что IIS пытается найти каталог, чтобы узнать, есть ли у вас файл по умолчанию (т.default.aspx, index.html) для загрузки из этого каталога.Поскольку он не может найти каталог с нежелательным тегом «abc», он никогда не находит файл default.aspx для загрузки.
Когда вы пытаетесь загрузить http://localhost/example/abc/default.aspx, IIS видит расширение «aspx» и немедленно передает его для обработки среде выполнения ASP.NET.Причина того, что http://localhost/пример/abc запрос не загружается, заключается в том, что он никогда не передается в ASP.NET, поэтому, конечно, global.asax его никогда не видит.
Сайт, размещенный на Cassini, обрабатывает все запросы, поэтому этот вызов обрабатывается ASP.NET и файлом global.asax.
Я согласен с Дарреном Коппом, который предположил, что вам необходимо настроить сопоставление обработчиков в IIS для пересылки неизвестных расширений в ASP.NET.