Могу ли я иметь «дружественные» URL без переписывающего URL в IIS? - PullRequest
1 голос
/ 09 сентября 2010

Без наличия переписчика URL, такого как ISAPI_Rewrite, возможно ли достичь следующего:

Я бы хотел, чтобы пользователь перешел на http://www.jjj.com/directory, где /directory на самом деле не существует.IIS переводит пользователя на not-found.cfm.

На данный момент я могу подать index.cfm т.е. http://www.jjj.com/directory/index.cfm.

URL будет отображаться очень хорошо, и страница загружается, даже если каталог или index.cfm не существует.Однако я бы хотел, чтобы в URL не было index.cfm.

Идеально:

  1. Запрос страницы http://www.jjj.com/directory

  2. IIS загружает not-found.cfm какобработчик ошибок по умолчанию 404.

  3. Not found лишает CGI.query_string и использует cfswitches для направления пользователя к соответствующей функции контроллера.Может использовать onMissingTemplate?

  4. Запрос страницы никогда не изменяется в URL-адресе, и страница прозрачно загружает пользователя со статусом 200 OK

  5. Если пользователь запрашивает http://www.jjj.com/directory/index.cfm Я бы 301 перенаправил на http://www.jjj.com/directory

Текущий :

  1. Страница запроса на http://www.jjj.com/directory

  2. IIS загружает not-found.cfm по умолчанию 404 обработчик ошибок.

  3. Not found лишает CGI.query_string и использует cfswitches для направления пользователя к соответствующей функции контроллера.

  4. Запрос страницы изменяется на http://www.jjj.com/directory/index.cfm со статусом 200 OK

Ответы [ 3 ]

3 голосов
/ 09 сентября 2010

Вы спрашиваете, как резать что-то, но говорите нам, что вам нельзя использовать нож или что-либо похожее на него.

Вот моя единственная умная идея, используя onMissingTemplate().

GET /directory/-> 404.cfm-> <cfinclude template="#cgi.script_name#/special.cfm" />-> запускает onMissingTemplate(), где вы игнорируете бит «special.cfm» и просто используете оставшуюся часть запрошенного пути, чтобы выяснить, к какому контроллеру подключиться.

Это, однако, хитрый хак,Я бы постарался избежать этого сам.Возможно, если вы объясните , почему перезапись ISAPI не подходит, мы могли бы помочь вам в дальнейшем.

1 голос
/ 09 сентября 2010

Есть ли IIS7 в списке утвержденных программ? Это может заставить вас переписать нативный URL и обойти весь вопрос.

Второй вариант - мой CFM voodoo ржавый, но я думаю, что вы можете настроить IIS6 для поиска страницы CFM (как вы делаете), но затем перейти на уровень приложения и выполнить переписывание / переопределение URL до того, как оно действительно попадает на страницу 404.

Другой способ обойти это - найти переписчик URL ISAPI, который, скажем, под лицензией MIT. Создайте свою собственную копию. Затем попросите их установить это как часть вашего программного пакета.

1 голос
/ 09 сентября 2010

Вы можете указать IIS, чтобы ошибки 404 и 403 выполняли пользовательский URL на вашем сайте (например, /urlhandler.cfm).

Затем вы можете проанализировать 'cgi.query_string' и направить приложениев любом случае вы хотите использовать cfinclude, чтобы просто включить правильный файл template.cfm, или вы можете переформатировать ввод, ожидаемый вашей структурой, или использовать проект, подобный http://coldcourse.riaforge.org/.

Всего одна заметка, которую даст IISURL, который выглядит следующим образом: '404; http://yoursite.com/the/url/you/wanted/to/route'.

...