Как вы видите URL-адрес на стороне клиента в ColdFusion?

Допустим, на сайте 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-адрес. Поскольку это в основном для пауков, javascript не Не подходящее решение в этом случае. Также предположим, что у кого-то нет доступа к isapi_rewrite или mod_rewrite. Вопрос в том, как этого добиться, в частности, в ColdFusion.

Ответов (5)

Решение

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

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

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

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

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

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

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

Не уверен, что это возможно с использованием только 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 = да

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

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

Думаю, это возможно.

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

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

Пытаться

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

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

Примечание. У меня нет под рукой Coldfusion, чтобы проверить это.

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

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

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

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

Мартин