使用PHP和IIS7创建SEO和人工频繁/可读的URL

使用PHP和IIS7创建SEO和人工频繁/可读的URL,php,iis,iis-7,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

我正在运行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
组件,但我不想手动输入值。我宁愿有一个动态的过程。我相信这里需要的功能是向
web.config
文件添加URL重写规则,但我不确定这是真的还是最好的方法


谢谢。

看起来:这正是您所需要的。

看起来:这正是您所需要的。

我建议您将ID与名称一起使用,以便您可以支持具有相同名称的产品(未来校对),或具有非ascii字符的产品。。。你应该有国际名字。我还建议现在只在URL中使用ascii字符,因为我注意到一些网站和浏览器倾向于将非ascii字符扩展为丑陋的百分比编码

iis7比Apache要复杂一些,但我认为这可能适合您

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

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

匹配URL

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

index.php?id={R:1} [QSA,L]
Apache只是为了好消息;)

下面是一个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=“日本产品ギター"


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

iis7比Apache要复杂一些,但我认为这可能适合您

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

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

匹配URL

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

index.php?id={R:1} [QSA,L]
Apache仅用于良好的通信;)

下面是一个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=“日本产品ギター"


这段代码太棒了;谢谢。由于网站的动态特性,我无法通过IIS7控制面板手动添加条目。使用PHP向web.config文件添加适当的重写规则的最佳方法是什么?再次感谢。我从未测试过此选项,但据报道它可以处理所有Apache风格的mod re-write选项和使用每个目录都有一个.htaccess文件。这段代码太棒了;谢谢。由于网站的动态特性,我无法通过IIS7控制面板手动添加条目。使用PHP向web.config文件添加适当的重写规则的最佳方法是什么?再次感谢。我从未测试过此选项,但据说它可以处理所有Apache文件设置mod重写选项的样式,并在每个目录中使用.htaccess文件。