2009-02-23 6 views
2

Скажем, на ColdFusion сайте, что пользователь уже плавал на http://www.example.com/sub1/Как вы видите URL-адрес на стороне клиента в ColdFusion?

Серверный код обычно используется, чтобы сказать вам, что 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» var будет включать в себя этот «index.cfm».

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

ответ

6

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

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

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

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

3

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

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

RewriteRule^страница/([0-9] +)/$ index.cfm страница = $ 1 & NOINDEX = да [L]

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

QUERY_STRING страница = 10 & NOINDEX = да

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

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

2

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

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

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

1

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

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

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

Попробуйте

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

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

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

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

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

+0

Нет, не представляется возможным с чистым решением CF. Ни область CGI, ни getHttpRequestData() не имеют URL-адрес на стороне клиента. – ale

0

Если вы можете установить Isapi_Rewrite (Предполагая, что вы находитесь на IIS) - http://www.helicontech.com/isapi_rewrite/

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

Martin

 Смежные вопросы

  • Нет связанных вопросов^_^