Как заставить Umbraco обрабатывать запросы для файлов не .aspx (интегрированный режим конвейера IIS)? - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь получить пакет 301 URL Tracker для Umbraco, чтобы он мне понравился.

Моя цель - иметь возможность сопоставить старые URL-адреса (из другой CMS) с новыми URL-адресами Umbraco. В моей конкретной ситуации старый сайт основан на PHP и поэтому использует расширение файла .php (http://example.net/test.php -> http://example.net/test/) - но это может быть любое расширение не .aspx (asp, png и т. Д.). Проблема в том, что Umbraco не обрабатывает запросы на файлы .php, он отлично работает для .aspx и каталогов (URL-адреса без расширений).

Я пробовал разные вещи, чтобы заставить это работать. Прежде чем идти дальше, я должен отметить, что пул приложений находится в интегрированном режиме и .NET 4.0.

Я вроде как заставил его работать, определив пользовательскую ошибку в web.config:

<customErrors defaultRedirect="not-exists.aspx" />

Это запускает обработчики, определенные в NotFoundHandlers в конфигурационном файле Umbraco 404handlers.config. Но имеет побочный эффект возврата заголовка 302 Found до того, как URL-трекер 301 включится и обработает перенаправление 301. И это просто большое SEO "нет нет".

Затем я попытался явно создать модуль обработчика HTTP для файлов .php. Я успешно получил модуль System.Web.UI.PageHandlerFactory для обработки запроса на файл .php. Но это не вызывает ни одного из NotFoundHandlers в Umbraco.

Насколько я понимаю, интегрированный конвейер в IIS 7, все зарегистрированные модули должны попытаться обработать запрос (http://stackoverflow.com/questions/3765317/how-to-catch-non-aspx-files-with-a-http-module). Но, возможно, кто-нибудь может просветить меня по этому вопросу?

Другие также испытывают трудности с настройкой этой конфигурации: http://our.umbraco.org/projects/developer-tools/301-moved-permanently/feedback/7271-when-the-old-pages-are-not-from-umbraco

Чего мне не хватает при получении Umbraco для обработки запроса файлов не .aspx в режиме интегрированного конвейера?

Ответы [ 2 ]

4 голосов
/ 23 февраля 2011

Если вы уже работаете в режиме интегрированного конвейера, включенный модуль UrlRewriting.net должен автоматически принимать запросы. Просто добавьте:

<add name="phptoaspx"
     virtualUrl="^~/(.*).php"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="/$1.aspx"
     ignoreCase="true" />

в ваш файл /config/UrlRewriting.config, и все должно быть хорошо.

P.S. Вы должны , а не использовать обработчик customError для обработки контента SEO 301/302. Это может быть большой головной болью с точки зрения удобства сопровождения - пожалуйста, поверьте мне, я пробовал это однажды, когда был младшим разработчиком .NET!

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

Я не знаком с Umbraco, но верю, что это то, что вы ищете http://blogs.iis.net/ruslany/archive/2008/09/30/wildcard-script-mapping-and-iis-7-integrated-pipeline.aspx

Конечно, вам придется добавить свои собственные правила переписывания ... так что это приведет вас только на полпути.

...