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 > $LOGFILEwhile read URL
do
NEWURL=$(echo “$URL” | sed -e ’s/\([^/]*\)\/\([^/]*\)\//\1=\2\&/g’ | sed ’s/[/&]$//’ | sed ’s/\//=/’ )
echo “Changing $URL to $NEWURL” >> $LOGFILE
echo $NEWURL
作者: volcano 发表于3月 16, 2006 at 11:23 am
Jacky 于 2006-03-22 @ 17:40:41 留言 :
可以说一下具体的实现方式吗? 谢谢.
我都是做成/test/test/test/index.html的方式. 速度太慢了.
QQ:259079
volcano 于 2006-03-22 @ 20:05:30 留言 :
我说下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而已
volcano 于 2006-03-27 @ 14:28:33 留言 :
简化后的脚本:
cat t.sh
#!/bin/sh
while read URL
do
echo “$URL” | sed -e ’s/\([^/]*\)\/\([^/]*\)\//\1=\2\&/g;s/[/&]$//;s/\//=/’
done
volcano 于 2006-03-28 @ 08:46:09 留言 :
使用RewriteMap时,为了避免一些随机性错误,需要加上这一行
RewriteLock /tmp/apache.lock