Как мне избавиться от? (вопросительный знак) в URL, который идентифицирует начало строки запроса? - PullRequest
1 голос
/ 08 октября 2011

Я использую ColdFusion 9.1.2.

Я создал новый веб-сайт, который анализирует строку запроса после имени домена и косой черты.Осталось только MusicianID, а затем строка, используемая для SEO.URL выглядит следующим образом:

http://awesomealbums.info/?1085/jim-croce
http://awesomealbums.info/?1077/james-taylor

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

Это выдает ошибку, которую я не могу контролировать:

http://awesomealbums.info/1085/jim-croce
http://awesomealbums.info/1077/james-taylor

Я заметил, что StackOverlfow и другие сайты могут исключать вопросительный знак, начинающий строку запроса.Я хотел бы сделать то же самое.Однако я не могу изменить настройки IIS или CF Administrator.Мне нужно закодировать решение.Я пытался, но IIS сообщает, что они не могут найти страницу.

Я хочу, чтобы мои URL выглядели так:

http://awesomealbums.info/1085/jim-croce // same as above but no ?
http://awesomealbums.info/1077/james-taylor // same as above but no ?

Вот код, который я используюпрямо сейчас, чтобы разобрать URL-адрес и получить MusicianID.

 <cfscript>
QString = CGI.QUERY_STRING;
if (QString eq "") {
    include "Home.cfm";
} else if (QString eq "WhoAmI") {
    include "WhoAmI.cfm";
} else {
    IndexOfSlash = Find("/", QString);
    if (IndexOfSlash eq 5) {
        ThisID = left(QString, 4);
        if (isNumeric(ThisID)) {
            MusicianID = ThisID;
            include "Musician.cfm";
        }
    } else {
        location(url="http://www.awesomealbums.info" addtoken="false");
    }
}

Как я могу изменить свой сайт так, чтобы знак вопроса можно было удалить, а веб-сервер не стал напуганным иЯ могу разобрать строку запроса?

Ответы [ 4 ]

5 голосов
/ 08 октября 2011

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

RewriteEngine on
RewriteRule ^/(\d{4})/([\w-]+)$ /?$1/$2 [L]

или

RewriteRule ^/(\d{4})/([\w-]+)$ /Musician.cfm?MusicianID=$1 [L]
3 голосов
/ 08 октября 2011

Поскольку вы не можете изменить веб-сервер (как правильно предлагает Роланд), есть одна альтернатива - используйте URL-адреса, которые выглядят следующим образом:

http://awesomealbums.info/index.cfm/1085/jim-croce

Структурированные таким образом,веб-сервер (IIS) все равно передаст управление вашему скрипту.Тогда вы можете начать контролировать процесс обработки.Ваша CGI.query_string будет пустой, но ваша переменная cgi.path_info будет содержать / 1085 / jim-croce.Затем вы можете начать анализировать и обрабатывать его по мере необходимости.

2 голосов
/ 08 октября 2011

Ответ на IIS в основном такой же, как Роланд упоминает в своем ответе.Вам нужно использовать перезапись URL, это единственный способ выполнить то, что вы хотите сделать.Это связано с тем, что технически URL-адрес, который вы хотите запросить, не существует как реальная страница или ресурс на сервере, и вам нужно использовать перезапись URL-адресов для перехвата запроса страницы, сопоставить его с помощью регулярных выражений, а затем передать его в приложение.в виде строки запроса (параметры страницы), которую вы ожидаете.Итак, если вы делаете это на размещенном сервере, обратитесь к вашему хосту и посмотрите, есть ли у них что-то настроенное или установленное на сервере для перезаписи URL.Большинство любого достойного хозяина наверняка будут.

Если вы используете IIS7, информацию об использовании перезаписи URL можно найти по ссылке:

http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/

Если вы используетеЕсли вы используете более старую версию IIS, вам необходимо установить приложение на сервере, которое будет делать это, поскольку в предыдущих версиях IIS не было встроенной поддержки перезаписи на основе регулярных выражений, что необходимо для правильного сопоставления URL-адресов с правильными параметрами наСтрока вашего запроса.Для более старых версий IIS я использовал Helicon IsapiRewrite, который вы можете найти по адресу:

http://www.isapirewrite.com/

0 голосов
/ 08 октября 2011

от ответа jfeasel, вы можете использовать ColdCourse:

http://coldcourse.riaforge.org/

...