PHP中apache和iis下Rewrite静态化服务器配置方法

动态URL静态化的主要目的,其一是搜索引擎优化(SEO),其二是面向用户友好。动态URL静态化是把一个动态地址转化成一个静态地址。其实,这个静态地址的内容还是从动态地址来的,只是看起来,类似一个静态地址。例如,本站页面

文章利用了Discuz! URL
静态化来介绍在php中apache和iis服务器的静态化规则,有需要的朋友可以参考一下本文章。

其真实地址是

iscuz! URL 静态化
功能受到论坛所在服务器环境的制约,在开启此功能之前,请根据你的 Web
服务器环境,选择相应的环境配置方法。错误的设置有可能造成服务器无法启动或者功能无效。
一、Apache Web Server(独立主机用户)
首先确定您使用的 Apache 版本,还有是否加载了 mod_rewrite 模块。
Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码:
   LoadModule rewrite_module     libexec/mod_rewrite.so
   AddModule mod_rewrite.c
Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段代码:
   LoadModule rewrite_module     modules/mod_rewrite.so
如果存在,那么在配置文件(通常就是
conf/httpd.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置,即
<VirtualHost>
中去,如果加在虚拟主机配置外部将可能无法使用。改好后将 Apache 重启。

采用一定的技术,把第一个地址指向第二个地址,也就实现了动态URL静态化的目的。

 代码如下


果进一步做到搜索引擎优化(SEO),可以尝试把地址修改成容易理解的文字,例如,416.htm可以修改为
child_kindergarten.html。这种做法在英文网站很流行,直接把标题作为连接就行了。中文网站实现比较困难。多数还是使用数字的。这
种做法主要针对Google,在目前的搜索引擎中,例如百度,MSN,Yahoo,没有谁比Google更重视url。

复制代码

动态URL静态化
有两种办法,第一是使用Web服务器的,第二是编程实现。编程实现思路比较简单,这里暂时不多说。我们的网站
由于使用的是一个小型的虚拟主机,所以不支持地址转化,就只有使用php编程实现。当然,多数的程序已经包括了
这部分,不需要自己写程序了。我们使用的bo-blog也已经包括了编程动态URL静态化,尽管还不是很完全。

<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^(.*)/archiver/((fid|tid)-[w-]+.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 ^(.*)/space-(username|uid)-(.+).html$
$1/space.php?$2=$3
      RewriteRule ^(.*)/tag-(.+).html$ $1/tag.php?name=$2
</IfModule>

基于Web服务器的动态
URL静态化就简单的多。当然,这里面包括两个部分,第一是配置Web服务器。基本上,大家使用虚拟主机的比较多,不可能自己配置,提供商提供的空间支持
动态URL静态化就可以使用,不支持基本上也没有什么办法。对于自己架构服务器的人来说,这本身小才一碟,不许多说。所以,这里主要说如何进行转换。

如果没有安装 mod_rewrite,您可以重新编译 Apache,并在原有 configure
的内容中加入 –enable-rewrite=shared,然后再在 Apache
配置文件中加入上述代码即可。
二、Apache Web Server(虚拟主机用户)
在开始以下设置之前,请首先咨询您的空间服务商,空间是否支持 Rewrite
以及是否支持对站点目录中 .htaccess
的文件解析,否则即便按照下面的方法设置好了,也无法使用。
检查论坛所在目录中是否存在 .htaccess
文件,如果不存在,请手工建立此文件。Win32 系统下,无法直接建立 .htaccess
文件,您可以从其他系统中拷贝一份,或者在 Discuz.net
技术支持栏目中下载此文件。编辑并修改 .htaccess 文件,添加以下内容
# 将 RewriteEngine 模式打开
RewriteEngine On
# 修改以下语句中的 /discuz
为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
RewriteBase /discuz
# Rewrite 系统规则请勿修改

首先,在服务器的根目录建立一个文件名为.htaccess的文件。这个文件内容基本如下:

 代码如下

RewriteEngine onRewriteBase /RewriteRule ^post/([0-9]+).htm$
read.php?$1RewriteRule ^post/([0-9]+)_([0-9]+).htm$
read.php?$1page=$2RewriteRule
^post/([0-9]+)_([0-9]+)_([0-9]+).htm$ read.php?$1page=$2=$3

复制代码

看懂了吧?如果懂正则表达式的人,马上明白怎么回事了。不懂得也没有关系,下面是一个常用正则表达式的列表,根据例子,稍微修改,就可以做到了。基本上,针对通常的连接转移,应该都可以很容易实现的。

RewriteRule ^archiver/((fid|tid)-[w-]+.html)$ archiver/index.php?$1
RewriteRule ^forum-([0-9]+)-([0-9]+).html$
forumdisplay.php?fid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$
viewthread.php?tid=$1&extra=page%3D$3&page=$2
RewriteRule ^space-(username|uid)-(.+).html$ space.php?$1=$2
RewriteRule ^tag-(.+).html$ tag.php?name=$1

添加内容时,请遵照上面的提示,修改论坛所在的路径,然后保存。将 .htaccess
文件上传到论坛所在的目录中。然后进入论坛系统设的搜索引擎优化,根据需要开启
URL 静态化功能。
三、IIS Web Server(独立主机用户)
首先在 IIS 的 Isapi 上添加这个筛选器,筛选器名称为 Rewrite
,可执行文件选择 Rewrite.dll ,重新启动 IIS。附件中 httpd.ini
已经设置好,其中内容如下:

 代码如下

复制代码

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
RewriteRule ^(.*)/archiver/((fid|tid)-[w-]+.html)?*(.*)$
$1/archiver/index.php?$2&$4
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+).html?*(.*)$
$1/forumdisplay.php?fid=$2&page=$3&$4
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html?*(.*)$
$1/viewthread.php?tid=$2&extra=page%3D$4&page=$3&$4
RewriteRule ^(.*)/space-(username|uid)-(.+).html?*(.*)$
$1/space.php?$2=$3&$4
RewriteRule ^(.*)/tag-(.+).html?*(.*)$ $1/tag.php?name=$2&$3

然后进入论坛系统设置的搜索引擎优化,根据需要开启 URL 静态化功能。
附件下载地址:
 
四、Zeus Web Server
在虚拟主机配置中找到 Request Rewriting,在 Rewrite Script
中写入以下内容,然后 Apply changes 并 make it take effect。
 

 代码如下

复制代码

     match URL into $ with
^(.*)/archiver/((fid|tid)-[w-]+.html)?*(.*)$
      if matched then
      set URL = $1/archiver/index.php?$2&$4
      endif
      match URL into $ with
^(.*)/forum-([0-9]+)-([0-9]+).html?*(.*)$
      if matched then
      set URL = $1/forumdisplay.php?fid=$2&page=$3&$4
      endif
      match URL into $ with
^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html?*(.*)$
      if matched then
      set URL = $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3&$4
      endif
      match URL into $ with
^(.*)/space-(username|uid)-(.+?).html?*(.*)$
      if matched then
      set URL = $1/space.php?$2=$3&$4
      endif
      match URL into $ with ^(.*)/tag-(.+?).html?*(.*)$
      if matched then
      set URL = $1/tag.php?name=$2$3
      endif

===========================================================
IIS Web Server(独立主机用户)1、下载IIS
Rewrite模块:   

 
2、将压缩包解压到任意目录,(如:C:Rewrite)。然后打开“控制面板”-“管理工具”-“IIS信息服务管理器”-“网站”-“您的站点”-“属性”。在“ISAPI筛选器”项点击
“添加”,筛选器名称填入Rewrite,可执行文件为C:RewriteRewrite.dll ;
3、然后修改httpd.ini 文件,添加相应的过滤规则,例如:

 代码如下

复制代码

RewriteRule ^(.*)/([a-z0-9-_]+)$ $1/Default.aspx?id=$2 [I,O]
就会等同于
RewriteRule ^(.*)/id_([a-z0-9-]+).html$ $1/Default.aspx?id=$2
[I,O]
就会等同于

^(.*)/html/([0-9]+)/([0-9]+).html$ $1/Default.aspx?id=$2&name=$3
就等同于

4、重新启动IIS就可以生效了(这一步很重要,每次修改httpd.ini后都要重启
IIS 以加载配置。)

URL
静态化来介绍在php中apache和iis服务器的静态化规则,有需要的朋友可以参考一下本文章。
iscuz! URL 静态化 功能受到论坛…

发表评论

电子邮件地址不会被公开。 必填项已用*标注