Как вы видите URL на стороне клиента в ColdFusion? - PullRequest
2 голосов
/ 24 февраля 2009

Допустим, на сайте ColdFusion пользователь перешел на http://www.example.com/sub1/

Код на стороне сервера, который обычно используется для определения URL-адреса пользователя, выглядит следующим образом: HTTP: //#cgi.server_name##cgi.script_name# # cgi.query_string #

однако, "cgi.script_name" автоматически включает файл cfm по умолчанию для этой папки - например, этот код при разборе и расширении покажет нам "http://www.example.com/sub1/index.cfm"

Таким образом, независимо от того, посещает ли пользователь файл sub1 / index.cfm или sub1 /, переменная «cgi.script_name» будет включать этот «index.cfm».

Вопрос в том, как определить, какой URL пользователь фактически посетил? Этот вопрос в основном для целей SEO. Часто бывает предпочтительнее 301 перенаправить «/index.cfm» на «/», чтобы убедиться, что для любого фрагмента контента есть только один URL. не является подходящим решением в этом случае. Кроме того, предположим, что у пользователя нет доступа к isapi_rewrite или mod_rewrite - вопрос заключается в том, как добиться этого, в частности, в ColdFusion.

Ответы [ 5 ]

6 голосов
/ 24 февраля 2009

Полагаю, это будет невозможно.

Если клиент запрашивает «GET /», он будет переведен веб-сервером в «GET / {what-default-file-существующие-fist}» до того, как ColdFusion даже будет вызван. (Это необходимо, чтобы веб-сервер знал, что ColdFusion должен быть вызван в первую очередь!)

С точки зрения ColdFusion (или любого сервера приложений) клиент запросил «GET /index.cfm», и это то, что вы видите в #CGI#.

Как вы указали сами, можно было бы сделать различие, используя инструмент перезаписи URL. Поскольку вы специально исключили этот путь, я могу только сказать, что вам здесь не повезло.

3 голосов
/ 24 февраля 2009

Не уверен, что это возможно только с использованием CF, но вы можете сделать трюк, переписав URL веб-сервера - , если вы их используете, конечно, .

Для Apache это может выглядеть так. Скажем, мы используем следующее правило mod_rewrite:

RewriteRule ^ page / ([0-9] +) /? $ index.cfm? page = $ 1 & noindex = yes [L]

Теперь, когда мы пытаемся получить доступ к URL http://website.com/page/10/ CGI показывает:

QUERY_STRING page = 10 & noindex = yes

Видишь идею? Думаю, что то же самое возможно при использовании IIS.

Надеюсь, это поможет.

2 голосов
/ 24 февраля 2009

Я не думаю, что это возможно в CF. Насколько я понимаю, веб-сервер (Apache, IIS и т. Д.) Определяет, какую страницу по умолчанию показывать, и запрашивает ее у CF. Следовательно, CF не знает, что такое фактически вызываемая страница.

Сергий прав, что для этого можно использовать переписывание URL. Если это вам недоступно, вы можете использовать тот факт, что конкретной странице предоставляется приоритет в списке страниц по умолчанию.

Предположим, что default.htm является первой страницей в списке страниц по умолчанию. Напишите общий файл default.htm, который автоматически перенаправляет в index.cfm (или что-то еще). Если вы можете настроить список значений по умолчанию, вы можете сделать так, чтобы CF делал 301 перенаправление. Если нет, вы можете выполнить мета-обновление, или перенаправление JS, или что-то подобное в файле HTML.

1 голос
/ 24 февраля 2009

Я думаю, что это возможно.

Используя GetHttpRequestData, вы получите доступ ко всем заголовкам HTTP.

Тогда заголовок GET, который должен указать вам, какой файл запрашивает браузер.

Попробуйте

<cfdump var="#GetHttpRequestData()#"> 

чтобы точно увидеть, что у вас есть в наличии.

Примечание. У меня нет Coldfusion для проверки.

Редактировать : Проведя дополнительные исследования, выясняется, что GetHttpRequestData не включает заголовок GET. Так что этот метод, вероятно, не будет работать.

Я уверен, что есть способ - попробуйте сбросить область видимости CGI и посмотреть, что у вас есть.

0 голосов
/ 03 августа 2009

Если вы можете установить ISAPI_rewrite (при условии, что вы используете IIS) - http://www.helicontech.com/isapi_rewrite/

Он вставит переменную x-rewrite-url в структуру результата GetHttpRequestData (), которая будет иметь / или /index.cfm в зависимости от того, какой URL был посещен.

Martin

...