Дружественный URL в формате «mydomain.com/username» без Mod Rewrite? - PullRequest
0 голосов
/ 01 декабря 2010

Я хотел бы знать, есть ли более простой способ, кроме Mod Rewrite (с использованием инфраструктуры fusebox или непосредственно в Coldfusion), преобразовать URL следующим образом:

из:

http://www.somedomain.com/salmahayek
or 
http://localhost/someApp/salmahayek

to:

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 ]

1 голос
/ 02 декабря 2010

Я делаю что-то подобное в одном из моих приложений в настоящее время, хотя и в PHP:

http://localhost/index.cfm/profile.view/salmahayek/

<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") />
<cfset action=urlArgs[1] />
<cfset name=urlArgs[2] />

Это работает отлично, но вы должны смириться с"index.cfm", если вы не хотите переписывать.

1 голос
/ 01 декабря 2010

Вы можете потенциально использовать «классический» способ сделать это (не уверен, что Fusebox будет мешать), используя обработчик 404, что-то вроде этого должно сделать свое дело:

  1. Установите сервер 404 на вашем сервере, например в .htaccess:

    ErrorDocument 404 /404handler.cfm

  2. настроить 404handler.cfm для обтекания фреймворка, например ::

    <cfset variables.checksok = false>
    <!--- do some checks - example --->
    <cfif cgi.REDIRECT_URL EQ 'salmahayek'>
        <cfset variables.checksok = true>
    </cfif>
    <cfif variables.checksok EQ true>
        <cfheader statuscode="200" statustext="OK">
        <cfset url.action = "profile.view">
        <cfset url.name = cgi.REDIRECT_URL>
        <cfinclude template="index.cfm">
    </cfif>

(не проверено, но должно работать)

0 голосов
/ 01 декабря 2010

Я фактически делал это в прошлом, используя метод onMissingTemplate () в Application.cfc. вы можете либо сделать несколько регулярных выражений для передаваемой внутрь arguments.targetpage, либо выполнить поиск в базе данных. в любом случае, вы бы потом сделали cflocation на правильной странице. просто не забудьте передать любые параметры URL-адреса.

Одна вещь, которую я никогда не пробовал и часто задавался вопросом, может ли это быть обработано в методе onRequestStart () вместо этого? самая большая проблема, которую я имею с использованием onMissingTemplate (), состоит в том, что вы делаете cflocation, который является совершенно новым запросом, и вы не можете проходить через переменные формы. да, я знаю, что вы, возможно, могли бы использовать вместо этого GetPageContext (). Forward (strUrl), но вы все равно собираетесь использовать весь жизненный цикл запроса для исходного запроса. сделав это в onRequestStart (), вы избежите этого.

Кто-нибудь хочет проверить это?

0 голосов
/ 01 декабря 2010

Я не уверен ни в ком другом, но я не понимаю, почему Mod Rewrite будет сложно, если вы не в IIS.Правило перезаписи просто должно быть примерно таким:

^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L]
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1

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

...