Дружественный URL в формате "mydomain.com/username" без Mod Rewrite?
Я хотел бы знать, есть ли более простой способ, кроме Mod Rewrite (с использованием инфраструктуры fusebox или непосредственно в Coldfusion), преобразовать URL следующим образом:
от:
http://www.somedomain.com/salmahayek
or
http://localhost/someApp/salmahayek
чтобы:
http://www.somedomain.com/index.cfm?action=profile.view&name=salmahayek
or
http://localhost/someApp/index.cfm?action=profile.view&name=salmahayek
Мое приложение - это существующее приложение Fusebox 5.5.
Мне просто нужно добавить, что указанный выше URL не является статичным, то есть "salmahayek" может быть любым именем.
Любая помощь будет принята с благодарностью
4 ответа
Вы могли бы потенциально использовать "классический" способ сделать это (не уверен, что Fusebox будет мешать), используя обработчик 404, что-то вроде этого должно сделать свое дело:
Установите сервер 404 на вашем сервере, например, в.htaccess:
ErrorDocument 404 /404handler.cfm
установите 404handler.cfm для обтекания фреймворка, например:
Cfif> Cfif>
(не проверено, но должно работать)
Сейчас я делаю что-то подобное в одном из моих приложений, хотя и в PHP:
http://localhost/index.cfm/profile.view/salmahayek/
<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") />
<cfset action=urlArgs[1] />
<cfset name=urlArgs[2] />
Это работает отлично, но вы должны смириться с "index.cfm", если вы не хотите переписывать.
Я фактически делал это в прошлом, используя метод onMissingTemplate() Application.cfc. вы можете либо сделать несколько регулярных выражений для передаваемой внутрь arguments.targetpage, либо выполнить поиск в базе данных. в любом случае, вы бы потом сделали cflocation на правильной странице. просто не забудьте передать любые параметры URL-адреса.
Одна вещь, которую я никогда не пробовал и часто задавался вопросом, может ли это быть обработано в методе onRequestStart() вместо этого? самая большая проблема, которую я имею с использованием onMissingTemplate(), состоит в том, что вы делаете cflocation, который является абсолютно новым запросом, и вы не можете пройти через переменные формы. да, я знаю, что вы, возможно, могли бы использовать вместо этого GetPageContext().Forward( strUrl), но вы все равно собираетесь использовать весь жизненный цикл запроса для исходного запроса. сделав это в onRequestStart(), вы избежите этого.
Кто-нибудь хочет проверить это?
Я не уверен ни в ком другом, но я не понимаю, почему Mod Rewrite будет трудным, если вы не в IIS. Правило перезаписи просто должно быть примерно таким:
^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L]
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1
Я добавил несколько дополнительных примеров, чтобы проверить, действительно ли пользователь пытается попасть на страницу регистрации или входа в систему и на каком этапе он находится.