URL Redirect в ColdFusion 8, работающем на IIS
У меня есть клиент, который хочет, чтобы псевдоним каталога автоматически перенаправлял на определенный шаблон...
кличка
http://www.host.com/thisplace
Реальный путь
http://www.host.com/somewhere/file.cfm?var=123&anothervar=567
Любые предложения о том, как это сделать?
2 ответа
Есть несколько способов сделать это. Один из способов - установить обработчик 404 как страницу cfm, а затем добавить код на страницу cfm, чтобы выявить имя файла или другие переменные, которые вы ищете. Это работает и даже работает хорошо - но с этим связаны некоторые расходы. Вот ссылка, которая показывает этот подход в IIS:
http://mkruger.cfwebtools.com/index.cfm?mode=entry&entry=8F4658E4-0763-5FB7-67D23B839AB74005
Мы успешно используем этот подход на сайте, который предоставляет HTML 5 "брошюры" для маркетинга. Наш администратор позволяет добавлять различные ключевые слова, а затем example.com/keyword запускает обработчик 404, который ищет ключевое слово и предоставляет нужную брошюру. Таким образом, вы могли бы сделать example.com/eatAtJoes - и брошюра кафе Джо будет подана. Он гибкий и не требует особого ухода и планирования. Ключевые слова просто должны быть уникальными и не могут отражать какие-либо фактические папки в корневом каталоге - вот и все. Но это означает запуск ошибки 404 для каждого потенциального ключевого слова, что не всегда оптимально.
Другим способом было бы использовать URLRewrite - но это может включать добавление чего-либо в ваш шаблон URL, например / go / где-нибудь, - а затем использование / go / для идентификации шаблона и / где-то для определения URL var. Этот подход является наименее затратным (с точки зрения ресурсов веб-сервера), но может потребовать более структурных изменений - т.е. вам придется изменить свои URL-адреса.
Я бы предпочел решение с перезаписью URL, как описывает Март А. Крюгер, но если вы ищете быстрое решение: добавьте следующее в ваш метод onRequestStart в вашем Application.cfc:
<cffunction name="onRequestStart" returnType="boolean" output="true">
<cfset sRedirects = structNew()/>
<cfset sRedirects["/thisplace"] = "/somewhere/file.cfm?var=123&anothervar=567"/>
<cfset sRedirects["/otherplace"] = "/somewhere_else/file.cfm?var=456&anothervar=abc"/>
<cfif structKeyExists(sRedirects,CGI.PATH_INFO)>
<cflocation url="#sRedirects[CGI.PATH_INFO]#" statuscode="301"/>
</cfif>
</cffunction>
Опять же, его быстрое исправление и перезапись URL, безусловно, способ пойти на мой взгляд.