使用PHP和IIS7创建SEO和人类可读/可读URL

时间:2011-07-29 19:35:47

标签: php iis iis-7

我正在运行PHP5.3.6和IIS7。我目前正在以产品为中心的网站上工作,我有一个php页面,可以根据/product.php?id=12345等查询字符串动态生成页面。

我在数据库中拥有的产品数量各不相同,但有数百种。它们具有唯一的ID和名称。

我希望每个页面都是按名称而不是查询字符串的地址。

例如,而不是:

/product.php?id=12345

我更愿意:

/acme-super-widget-in-blue-with-cool-groovy-gadget-attachment

我在IIS7中有URL Rewrite组件,但我不想手动输入值。我宁愿有一个动态的过程。我相信这里需要的功能是将URL重写规则添加到web.config文件,但我不确定这是真的还是最好的方法。

谢谢。

2 个答案:

答案 0 :(得分:1)

我建议您使用ID和名称,这样您就可以支持具有相同名称的产品(面向未来)或带有非ascii字符的产品......如果您有国际名称。我还建议现在只在URL中使用ascii字符,因为我注意到一些网站和浏览器倾向于将非ascii字符扩展为难看的百分比编码。

IIS 7比Apache有点棘手,但我认为这可能对您有用http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx

这是一个示例重写规则,它将从id中删除名称并仅将id传递给脚本。

IIS 7使用上面链接中的模块

匹配网址

^([0-9]+)[^/]*/?$

动作

index.php?id={R:1} [QSA,L]

Apache只是为了好事;)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9]+)[^/]*/?$ index.php?id=$1 [QSA,L]

这是一个PHP函数,它将生成友好URL的id名称部分。

function friendlyURL($id, $title) {

    $string = $title;
    $paramcount = func_num_args();
    for ($i = 2; $i < $paramcount; $i++) {
        $string .= "-" . func_get_arg($i);
    }
    $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string);
    $string = htmlentities($string, ENT_COMPAT, "utf-8");
    $string = preg_replace("`&([a-z]+);`i", "", $string);
    $string = preg_replace("`['\[\]]`", "", $string);

    $tmp = $string;
    $string = preg_replace(array("/[^A-Za-z0-9]/", "`[-]+`"), "-", $string);

    $string = trim($string, '-');
    return trim($id . "-" . $string, '-');
}

这会为您提供类似

的网址

产品ID = 12345,Name =“acme super widget”

/12345-acme-super-widget/

产品编号= 12345,名称=“日本产品ギター”

/12345-japanese-product/

答案 1 :(得分:0)

看起来像这样:http://www.iis.net/download/URLRewrite正是您所需要的。