| URL ReWrite问题 |
|
作者:-①℃冰寒 文章来源:本站原创 点击数: 更新时间:2007-1-9 10:49:36  |
我的论坛也是bbsxp 6.0 的,很高兴发现这个和我们的同样版本的IT类论坛。我是一个技术菜鸟。一直很想搞明白一个问题,就是如何可以通过URL ReWrite技术, 把bbsxp 6.0动态页面的url映射成和静态页面url相似的格式.比如将../bbs/blog.asp?id =10 通过该请求,映射为../bbs/blog/10. html这样,搜 索引擎误以为是静态页面,就可以被收取了.
我曾经看过一个日访问量约7千的论坛流量统计记录,发现其中的相当大的流量,来源对论坛帖子的随机搜索。如果论坛所有帖子,均可以进入搜索引擎的数据库,那么毫无疑问的,将可以带来相当大的访问量。而且访问者越多,发帖的总量越多, 这个访问量的增长量就会越大。
URL ReWrite技术,根据我搜集的资料,它实际上是动态网站静态化的化一种方法。动态网站优点是内容管理系统方便了网页更新,却给大部分搜索引擎带来麻烦,很多搜索引擎不收取动态页面,或只收取第一层页面,不会向下深入收取。而这时要如果使用WEB服务器的重写(rewrite)技术,把动态页面的url映射成和静态页面url相似的格式,搜索引擎误以为是静态页面,就会收取了。 关于动态网站静态化的问题,可以看以下网址中的"第十五课 动态网站的静态化处理"(打开方法:点击wangtong文件夹,再点“.exe”文件,无密码) http://www.seores.com/download/soft/20051123101325.shtml 另外,用“动态网站静态化”或其它相关关键词,都可以找到很多现成的程序。 动态转化为静态,也有危险,看这里……但是,这样做后,如果成功了,每年将可能使这里注册量至少增加数万。
另外,以下帖子可能会对此有参考: 有关动态网站url静态化的一点疑问 UrlRewrite重写技术
希望斑竹可以不吝赐教,帮小D解决这个难题,使我们的论坛都可以更快的发展。
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-4-24 7:39:19
在技术方面大家都是平等的,各有所长,说不上赐教,大家互相学习,一起提高。
谢谢你的这个帖子,很好的问题,论坛一直对如何能被搜索引擎频繁访问和抓取论坛更多的内容在想办法,这个问题暂时我们也在想办法解决,并会把想到的方法不断跟贴出来,欢迎你和更多的电脑爱好者来参与,大家一起研究。
从其他方面如何加大论坛访问量,我们在生活万花筒的管理荟萃版块和电脑技术的服务器版块版块有一些文章,希望也对你有些小小的帮助。
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-4-24 7:48:55
实现方式主要有2种:
基于url rewrite IIS的ISAPI REWRITE下载(免费) 基于path_info 把URI地址用作参数传递:URL REWRITE
最简单的是基于各种WEB服务器中的URL重写转向(Rewrite)模块的URL转换: 这样几乎可以不修改程序的实现将 news.asp?id=234 这样的链接映射成 news/234.html,从外面看上去和静态链接一样。Apache服务器上有一个模块(非缺省):mod_rewrite:URL REWRITE功能之强大足够写上一本书。
当我需要将将news.asp?id=234的映射成news/234.html时,只需设置: RewriteRule /news/(\d+)\.html /news\.asp\?id=$1 [N,I] 这样就把 /news/234.html 这样的请求映射成了 /news.asp?id=234 当有对/news/234.html的请求时:web服务器会把实际请求转发给/news.asp?id=234
而在IIS也有相应的REWRITE模块:比如ISAPI REWRITE和IIS REWRITE,语法都是基于正则表达式,因此配置几乎和apache的mod_rewrite是相同的:
比对于某一个简单应用可以是: RewriteRule /news/(\d+)\.html /news/news\.php\?id=$1 [N,I] 这样就把 http://www.chedong.com/news/234.html 映射到了 http://www.chedong.com/news/news.php?id=234
一个更通用的能够将所有的动态页面进行参数映射的表达式是: 把 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]
以下是针对phpBB的一个Apache mod_rewrite配置样例:
RewriteEngine On RewriteRule /forum/topic_(.+)\.html$ /forum/viewtopic.php?t=$1 [L] RewriteRule /forum/forum_(.+)\.html$ /forum/viewforum.php?f=$1 [L] RewriteRule /forum/迁移到java平台时,对于前台用户来说,根本感受不到后台应用的变化; 简化数据校验:因为像(\d+)这样的参数,可以有效的控制数字的格式甚至位数; 比如我们需要将应用从news.asp?id=234迁移成news.php?query=234时,前台的表现可以一直保持为 news/234.html。从实现应用和前台表现的分离:保持了URL的稳定性,而使用mod_rewrite甚至可以把请求转发到其他后台服务器上。
基于PATH_INFO的URL美化 Url美化的另外一个方式就是基于PATH_INFO: PATH_INFO是一个CGI 1.1的标准,经常发现很多跟在CGI后面的"/value_1/value_2"就是PATH_INFO参数: 比如:http://phpunixman.sourceforge.net/index.php/man/ls 中:$PATH_INFO = "/man/ls"
PATH_INFO是CGI标准,因此PHP Servlet等都有的支持。比如Servlet中就有request.getPathInfo()方法。 注意:/myapp/servlet/Hello/foo的 getPathInfo()返回的是/foo,而/myapp/dir/hello.jsp/foo的getPathInfo()将返回的 /hello.jsp,从这里你也可以知道jsp其实就是一个Servlet的PATH_INFO参数。ASP不支持PATH_INFO PHP中基于PATH_INFO的参数解析的例子如下: //注意:参数按"/"分割,第一个参数是空的:从/param1/param2中解析出$param1 $param2这2个参数 if ( isset($_SERVER["PATH_INFO"]) ) { list($nothing, $param1, $param2) = explode('/', $_SERVER["PATH_INFO"]); }
如何隐蔽应用:例如 .php,的扩展名: 在APACHE中这样配置: <FilesMatch "^app_name$"> ForceType application/x-httpd-php </FilesMatch>
如何更像静态页面:app_name/my/app.html 解析的PATH_INFO参数的时候,把最后一个参数的最后5个字符“.html”截断即可。 注意:APACHE2中缺省是不允许PATH_INFO的,需要设置 AcceptPathInfo on
特别是针对使用虚拟主机用户,无权安装和配置mod_rewrite的时候,PATH_INFO往往就成了唯一的选择。
OK,这样以后看见类似于http://www.example.com/article/234 这样的网页你就知道可能是 article/show.php?id=234这个php程序生成的动态网页,很多站点表面看上去可能有很多静态目录,其实很有可能都是使用1,2个程序实现的内容发布。比如很多WIKIWIKI系统都使用了这个机制:整个系统就一个简单的wiki程序,而看上去的目录其实都是这个应用拿后面的地址作为参数的查询结果。
利用基于MOD_REWRITE/PATH_INFO + CACHE服务器的解决方案对原有的动态发布系统进行改造,也可以大大降低旧有系统升级到新的内容管理系统的成本。并且方便了搜索引擎收录入索引。
附:如何在IIS上利用PHP支持PATH_INFO PHP的ISAPI模式安装备忘:只试成 php-4.2.3-Win32
解包目录 ======== php-4.2.3-Win32.zip c:\php
PHP.INI初始化文件 ================= 复制:c:\php\php.ini-dist 到 c:\winnt\php.ini
配置文件关联 ============ 按照install.txt中的说明配置文件关联
运行库文件 ========== 复制 c:\php\php4ts.dll 到 c:\winnt\system32\php4ts.dll
这样运行后:会发现php把PATH_INFO映射到了物理路径上 Warning: Unknown(C:\CheDong\Downloads\ariadne\www\test.php\path): failed to create stream: No such file or directory in Unknown on line 0
Warning: Unknown(): Failed opening 'C:\CheDong\Downloads\ariadne\www\test.php\path' for inclusion (include_path='.;c:\php4\pear') in Unknown on line 0
安装ariadne的PATCH ================== 停止IIS服务 net stop iisadmin ftp://ftp.muze.nl/pub/ariadne/win/iis/php-4.2.3/php4isapi.dll 覆盖原有的c:\php\sapi\php4isapi.dll
注: ariadne是一个基于PATH_INFO的内容发布系统, PHP 4.3.2 RC2中CGI模式的PATH_INFO已经修正,照常安装即可。
参考资料: URL Rewrite文档: ISAPI REWRITE文档 IIS的ISAPI REWRITE下载(免费) http://httpd.apache.org/docs/mod/mod_rewrite.html http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html
搜索引擎友好的URL设计 http://www.sitepoint.com/article/485 说不定这个URL原来就是articel.php?id=485
一个基于PATH_INFO的开源内容管理系统 http://typo3.com/
Google的PageRank算法说明: http://pr.efactory.de/
原文出处:<a href="http://www.chedong.com/tech/google_url.htmlhttp://www.chedong.com/tech/goo ... ww.chedong.com/tech/google_url.html</a>
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-4-24 12:27:50
版主老兄,您好.URL REWRITE可否在我们的BBSXP 6.00 版本中实现?该如何修改.如果方便,希望这里先期尝试,而后教教小D.但是,注意,不要产生这里……的问题. 将继续搜集这方面的信息,放在这里,和大家一块交流.
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-4-24 21:00:18
OK,没问题。
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-4-25 16:57:52
哈哈,老兄古道热肠,谢谢了!
--------------------------------------------------------------------------------
作者:lihei 发表时间:2006-4-25 18:10:06
你的论坛地址呢。。。。。
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-4-26 12:28:57
http://www.dggkc.com/bbs/
帮朋友搞的口吃论坛.当前过小,我在想办法尽快把它做大.
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-4-27 13:02:29
最近有些忙....
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-4-28 22:36:36
老兄,来日方长
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-13 19:43:27
总算安定下来了。不好意思,由于一些原因,这个问题一直没去试过,不过一直没忘记,今天起开始做。
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-5-14 13:15:50
哈哈,搬个沙发等着,,
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-14 13:58:08
用URL美化来提高搜索引擎的友好度主要有两种方式:1)URL Rewriting;2)PATH_INFO
URL Rewriting主要是利用Apache中的rewrite_module来实现URL的重写(IIS中也有相应的模块)。简单的说,该Module就是一个采用正则表达式进行分析,替换的Filter,来实时的改变用户请求的URL。改写的规则可以定义在服务器范围内(httpd.conf)、目录范围内(.htaccess),因为一般的虚拟主机不允许我们修改httpd.conf,所以我们只能来修改每个目录内的.htaccess文件了。但是从效率上来说,httpd.conf内定义的规则只在Apache启动的时候进行加载,所以效率很高,而.htaccess中定义的规则,在每次URL访问的时候都要重新访问此文件,大大的降低了效率。
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-14 13:59:10
利用Apache的URL Rewrite模块来进行URL美化,不用更改代码,同时,也可以一定程度上的隐藏后台的实现,屏蔽将来内部设计的变化,缺点就是带来效率上的损失。
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-14 14:02:44
这两天研究Discuz 4.1,并成功地将原来一个Discuz 2.5的论坛升级到了最新版本,个人感觉这个论坛实在不错。
我的Discuz 4.1是在Apache+Php+Mysql下运行的,并开启了Url Rewrite,之后我发现整个论坛的大部分页面都可以使用html的静态地址方式来访问,感觉真不错,Apache实在太强大了,难怪现在用Apache的站点那么多。
IIS下能否也实现这种静态化功能呢,我知道Helicon开发了一个叫ISAPI_Rewrite的ISAPI程序,可以在IIS下实现Url Rewrite功能,不过我自己还没有尝试过,过两天按照下面的操作测试一下看看效果如何。另外,下文Discuz提供的ZIP文件里的Rewrite.dll实际上就是Helicon的ISAPI_Rewrite程序,我对Discuz做为软件开发商居然也盗版同行的软件感到遗憾。
参考文章:Discuz!4.1.0 IIS Rewrite配置方法(转自DISCUZ会员区)
Discuz! URL静态化功能受到论坛所在服务器环境的制约,在开启此功能之前,请根据你的Web服务器环境,选择相应的环境配置方法,以下提供的iis6下的服务器配置..其它服务器(如apache,zeus)你可以根据原理自行配置。
1、下载IIS Rewrite模块:http://download.discuz.net/4.1.0/discuz_iis_rewrite.zip ;
2、将压缩包解压到任意目录,(如:C:\Rewrite)。然后打开“控制面板”-“管理工具”-“IIS信息服务管理器”-“网站”-“您的站点”-“属性”。在“ISAPI筛选器”项点击“添加”,筛选器名称填入Rewrite,可执行文件为C:\Rewrite\Rewrite.dll;
3、重新启动IIS就可以生效了。
通过上述配置后,您就可以在Discuz!4.1.0后台中根据需要开启影响的静态功能了。
无:不启用URL静态化功能。
Discuz!Archiver静态化:当论坛启用Archiver功能时,Archiver内的所有链接均采用*.html形式。
普通页面静态化:对论坛常用页面(如forumdisplay.php、viewthread.php、viewpro.php等)进行URL静态化转换。
Archiver和普通页面均静态化:对Archiver以及论坛常用页面(如forumdisplay.php、viewthread.php、viewpro.php等)进行URL静态化转换。
使用注意事项:
您可以通过系统设置中Discuz!选项来控制URL静态化的打开或关闭及其工作状态,本功能对服务器环境有特殊要求,独立主机用户需要对Web服务器增加相应的Rewrite规则,因此需要服务器权限才可使用;对于虚拟主机用户,您需要向您的空间服务商进行咨询:空间是否支持Rewrite以及是否支持对站点目录中.htaccess的文件解析,只有满足这两条件,URL静态化功能才会生效。打开URL静态化后,论坛一些常用链接会变成类似discuz/forum-1-1.html形式,如果您的服务器环境不支持或者尚未配置好,访问这些链接会出现“网页无法显示”的错误信息,论坛将无法正常访问。发生无法访问的现象时,请您进入管理后台,关闭URL静态化功能,论坛即可恢复正常状态。
本文提供的压缩包中还有一个httpd.ini文件,该文件是rewrite规则的配置文件。内容如下(无需修改):
[ISAPI_Rewrite] # 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32 # Protect httpd.ini and httpd.parse.errors files # from accessing through HTTP RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index\.php\?$2 RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2&page=$3 RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$$1/viewthread\.php\?tid=$2&extra=page\%3D$4&page=$3 RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro\.php\?$2=$3
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=835594
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-14 14:18:05
4. 重写URLs
Apache的拥护者一直就吹嘘mod_rewrite的强大功能,现在,用于IIS的这类产品有一打那么多,很多比mod_rewrite要好用,因为使用mod_rewrite,你必须熟悉正则表达式。试一下:IISWrite或ISAPI rewrite。
--------------------------------------------------------------------------------
作者:stuttercn 发表时间:2006-5-18 13:45:33
谢谢!我再学习学习!
这两天通过我论坛中的链接总打不开这里,而且这里的LOGO图片也不能显示.原本以为论坛出了问题,不过偶尔输入域名竟然打开了.论坛改版后很棒,版面漂亮多了,也增加了一些很实用的新功能.令小弟非常的羡慕.以后您有时间,希望老兄可以多多指点
--------------------------------------------------------------------------------
作者:计算机服务 发表时间:2006-5-20 21:50:36
以后我有问题你可一定要帮忙啊,呵呵
|
| 文章录入:-①℃冰寒 责任编辑:范有昌 |
|
上一篇文章: windows 下配置 apache 2.2.3+php 5.1.3+mysql 5.0.24+zend 3.0.1最新配置 下一篇文章: 没有了 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |