Дружественный 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, что-то вроде этого должно сделать свое дело:

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

    ErrorDocument 404 /404handler.cfm

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

    
    
    
        
    
    
        
        
        
        
    

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

Сейчас я делаю что-то подобное в одном из моих приложений, хотя и в 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

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

Другие вопросы по тегам