Как мне получить ВЕСЬ URL, как видно в браузере без JS? - PullRequest
4 голосов
/ 15 февраля 2012

У меня есть приложение, которое я создаю в ColdFusion, посредством которого все запросы будут выполняться через файл index.cfm.

У меня есть файл .htaccess, который переписывает URL. Так, например ... если я напишу:

http://domain.com/hello/goodbye/howdy

Фактический запрос всегда использует index.cfm следующим образом:

http://domain.com/index.cfm/hello/goodbye/howdy

Все это прекрасно работает, но теперь я застрял в том, как я могу получить все, что в URL. Похоже, что ни одна из переменных CGI не выводит часть URL "/ hello / goodbye / howdy".

Я пробовал cgi.path_info, cgi.query_string и т. Д. Безрезультатно ... они просто пустые.

Мне нужно захватить все, что идет после доменного имени, и делать с ним что-то в CF. Я знаю, что это возможно в JS, но мне действительно нужно это на сервере.

Сброс области видимости CGI не показывает мне ничего полезного в этом отношении:

<cfdump var="#cgi#" />

Вот мой htaccess файл для справки:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /
RewriteRule ^index\.cfm$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.cfm [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} !^([^\.]+)\.domain\.com
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

</IfModule>

Спасибо.

EDIT:

В качестве дополнительного примечания я также попробовал базовые методы Java, например:

<cfdump var="#getPageContext().getRequest().getContextPath()#" />
<cfdump var="#getPageContext().getRequest().getRequestURL()#" />
<cfdump var="#getPageContext().getRequest().getQueryString()#" />

Безуспешно: (

Ответы [ 4 ]

5 голосов
/ 15 февраля 2012
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteRule ^index\.cfm$ - [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} !^([^\.]+)\.domain\.com
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

#Change exists here:
RewriteRule ^(.*)$ /index.cfm?actualuri=$1 [L,QSA]

</IfModule>

попробуйте cgi.query_string сейчас.Он должен иметь actualuri=/the/path/sent.
Кроме того, поместите правила перезаписи в том же порядке, как указано выше.

3 голосов
/ 15 февраля 2012

Проверьте # CGI.REQUEST_URI # - это недокументировано, но работает

2 голосов
/ 06 августа 2013

Надеюсь, это то, что вы ищете.

  <cfset link = "http://" & GetHttpRequestData().headers['host'] & GetHttpRequestData().headers['X-REWRITE-URL'] >
0 голосов
/ 16 февраля 2012

Я думаю, что самый простой способ - это посмотреть на поле CGI.PATH_INFO.

...