Search Engine Friendly的URL设计 – 俺在这个事上面折腾

最近的某个项目需要配合seo,改进php动态页面的url,这里首先参考了车东的
如何提高在Google中的排名(3) —— Search Engine Friendly的URL设计

其中有一段url rewrite的例子比较符合要求且改动最少:

一个更通用的能够将所有的动态页面进行参数映射的表达式是:
http://www.myhost.com/foo.php?a=A&b=B&c=C
表现成
http://www.myhost.com/foo.php/a/A/b/B/c/C
RewriteRule (.*?\.php)(\?[^/]*)?/([^/]*)/([^/]*)(.+?)? $1(?2$2&:\?)$3=$4?5$5: [N,I]

这段例子我在自家的apache上操练了很久,反复的调试,修改httpd.conf,查看error.log,rewrite.log,失败的一塌糊涂,几乎让我产生巨大的挫败感.后来查看了apache手册的rewrite指南,发觉里面根本没有[N,I]这个I flag,这下终于明白,这个rewrite规则8成是在IIS上面适用,IIS和apache向来是世仇,通用就甭考虑了.这里又去麻烦网管大哥,讨得下面这段rewrite规则,基本满足需求:

RewriteEngine on
RewriteMap quux-map prg:/root/t.sh
RewriteRule ^/(.*)\.php/(.*) /$1.php?${quux-map:$2}

cat t.sh

#!/bin/sh

LOGFILE=/tmp/percent_rewrite.log
cat /dev/null > $LOGFILE

while read URL
do
NEWURL=$(echo “$URL” | sed -e ‘s/\([^/]*\)\/\([^/]*\)\//\1=\2\&/g’ | sed ‘s/[/&]$//’ | sed ‘s/\//=/’ )
echo “Changing $URL to $NEWURL” >> $LOGFILE
echo $NEWURL

4 Replies to “Search Engine Friendly的URL设计 – 俺在这个事上面折腾”

  1. 可以说一下具体的实现方式吗? 谢谢.
    我都是做成/test/test/test/index.html的方式. 速度太慢了.
    QQ:259079

  2. 我说下linux下的实现方式,只要修改apache(apache要支持rewrite)配置,在httpd.conf加入下面几行:

    RewriteEngine on
    RewriteMap quux-map prg:/root/t.sh
    RewriteRule ^/(.*)\.php/(.*) /$1.php?${quux-map:$2}

    然后在/root目录下新增一个文件t.sh.内容如下:

    #!/bin/sh

    LOGFILE=/tmp/percent_rewrite.log
    cat /dev/null > $LOGFILE

    while read URL
    do
    NEWURL=$(echo “$URL” | sed -e ’s/\([^/]*\)\/\([^/]*\)\//\1=\2\&/g’ | sed ’s/[/&]$//’ | sed ’s/\//=/’ )
    echo “Changing $URL to $NEWURL” >> $LOGFILE
    echo $NEWURL

    加完文件后,修改t.sh为可执行文件:
    chmod +x t.sh

    然后重启apache,这样如果你访问
    http://www.myhost.com/foo.php/a/A/b/B/c/C
    会自动隐性定向到
    http://www.myhost.com/foo.php?a=A&b=B&c=C

    但是这种并不会改善访问速度,只有优化了url而已

  3. 简化后的脚本:

    cat t.sh

    #!/bin/sh
    while read URL
    do
    echo “$URL” | sed -e ‘s/\([^/]*\)\/\([^/]*\)\//\1=\2\&/g;s/[/&]$//;s/\//=/’
    done

Leave a Reply

Your email address will not be published.