我怎么摆脱? URL中的(问号)标识查询字符串的开头?

时间:2011-10-07 22:54:38

标签: coldfusion seo

我正在使用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管理员设置。我需要编写解决方案代码。我试过了,但我得到IIS告诉我他们找不到页面。

我希望我的网址看起来像这样:

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 个答案:

答案 0 :(得分:5)

您要查找的关键字是网址重写。它必须在Web服务器上发生,因为您要处理顶级目录中的所有请求。如果您的Web服务器是Apache httpd,您可以这样做:

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

RewriteRule ^/(\d{4})/([\w-]+)$ /Musician.cfm?MusicianID=$1 [L]

答案 1 :(得分:3)

由于您无法修改Web服务器(正如Roland正确建议的那样),有一种替代方法 - 使用如下所示的URL:

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

以这种方式结构化,Web服务器(IIS)仍然会将控制权传递给您的脚本。然后你可以开始让CF接管对处理的控制。您的CGI.query_string将为空,但您的cgi.path_info变量将包含/ 1085 / jim-croce。然后,您可以开始解析并根据需要进行处理。

答案 2 :(得分:2)

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/

答案 3 :(得分:0)

借助jfeasel的回答,你可以使用ColdCourse:

http://coldcourse.riaforge.org/