如何利用.htaccess文件对PHP网站或文件进行伪静态处理
利用htaccess文件对PHP网站进行伪静态处理要考虑两点:
一服务器支持伪静态,比如Apache要开启mod_rewrite模块支持
二利用htaccess完成伪静态需要根据不同的网站系统进行不同的设置,以下是一些常见系统的htaccess设定:
01wordpress:
# BEGIN WordPress
<IfModule mod_rewritec>
RewriteEngine On
RewriteBase /
RewriteRule ^indexphp$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /indexphp [L]
</IfModule>
02Phpwind
RewriteEngine On
RewriteBase /
RewriteRule ^()-htm-()$ $1php$2
RewriteRule ^()simple/([a-z0-9\_]+\html)$ $1/simple/indexphp$2
03Discuz
RewriteEngine On
# Rewrite 系统规则请勿修改
RewriteRule ^archiver/((fid|tid)-[0-9]+\html)$ archiver/indexphp$1
RewriteRule ^forum-([0-9]+)-([0-9]+)\html$ forumdisplayphpfid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\html$ viewthreadphptid=$1&extra=page\%3D$3&page=$2
RewriteRule ^space-(username|uid)-(+)\html$ spacephp$1=$2
RewriteRule ^tag-(+)\html$ tagphpname=$1
04ecshop
RewriteEngine On
# direct one-word access
RewriteRule ^index\html$ index\php [L]
RewriteRule ^category$ index\php [L]
# access any object by its numeric identifier
RewriteRule ^feed-c([0-9]+)\xml$ feed\php\cat=$1 [L]
RewriteRule ^feed-b([0-9]+)\xml$ feed\php\brand=$1 [L]
RewriteRule ^feed\xml$ feed\php [L]
RewriteRule ^category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-])-([0-9]+)-(+)-([a-zA-Z]+)()\html$ category\php\id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 [QSA,L]
RewriteRule ^category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-])()\html$ category\php\id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 [QSA,L]
RewriteRule ^category-([0-9]+)-b([0-9]+)-([0-9]+)-(+)-([a-zA-Z]+)()\html$ category\php\id=$1&brand=$2&page=$3&sort=$4&order=$5 [QSA,L]
RewriteRule ^category-([0-9]+)-b([0-9]+)-([0-9]+)()\html$ category\php\id=$1&brand=$2&page=$3 [QSA,L]
RewriteRule ^category-([0-9]+)-b([0-9]+)()\html$ category\php\id=$1&brand=$2 [QSA,L]
RewriteRule ^category-([0-9]+)()\html$ category\php\id=$1 [QSA,L]
RewriteRule ^goods-([0-9]+)()\html$ goods\php\id=$1 [QSA,L]
RewriteRule ^article_cat-([0-9]+)-([0-9]+)-(+)-([a-zA-Z]+)()\html$ article_cat\php\id=$1&page=$2&sort=$3&order=$4 [QSA,L]
RewriteRule ^article_cat-([0-9]+)-([0-9]+)()\html$ article_cat\php\id=$1&page=$2 [QSA,L]
RewriteRule ^article_cat-([0-9]+)()\html$ article_cat\php\id=$1 [QSA,L]
RewriteRule ^article-([0-9]+)()\html$ article\php\id=$1 [QSA,L]
RewriteRule ^brand-([0-9]+)-c([0-9]+)-([0-9]+)-(+)-([a-zA-Z]+)\html brand\php\id=$1&cat=$2&page=$3&sort=$4&order=$5 [QSA,L]
RewriteRule ^brand-([0-9]+)-c([0-9]+)-([0-9]+)()\html brand\php\id=$1&cat=$2&page=$3 [QSA,L]
RewriteRule ^brand-([0-9]+)-c([0-9]+)()\html brand\php\id=$1&cat=$2 [QSA,L]
RewriteRule ^brand-([0-9]+)()\html brand\php\id=$1 [QSA,L]
RewriteRule ^tag-()\html search\php\keywords=$1 [QSA,L]
RewriteRule ^snatch-([0-9]+)\html$ snatch\php\id=$1 [QSA,L]
RewriteRule ^group_buy-([0-9]+)\html$ group_buy\php\act=view&id=$1 [QSA,L]
RewriteRule ^auction-([0-9]+)\html$ auction\php\act=view&id=$1 [QSA,L]
05phpcms
RewriteEngine On
RewriteRule ^()content-([0-9]+)-([0-9]+)-([0-9]+)\html$ $1/index\php\m=content&c=index&a=show&catid=$2&id=
$3&page=$4
RewriteRule ^()show-([0-9]+)-([0-9]+)-([0-9]+)html$ $1/index\php\m=content&c=index&a=show&catid=$2&id=
$3&page=$4
RewriteRule ^()list-([0-9]+)-([0-9]+)html$ $1/index\php\m=content&c=index&a=lists&catid=$2&page=$3
你说的这个是可以实现的 多域名指向一个主域名 就是用301重定向
301重定向:
页面永久性移走(301重定向)是一种非常重要的“自动转向”技术。
从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而收到丝毫影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。
如何用htaccess重定向:
因为不是所有的虚拟主机都支持这种操作,所以也有以下的条件才会支持。
1、linux的虚拟主机Apache的服务器,需要支持htaccess 这个文件。(咨询主机商是否支持)如果支持,则先2个域名都解析到同一个IP,然后在htaccess文件开始处加入一下规则:
代码:
RewriteCond %{http_host} ^AAAcom [NC]
RewriteRule ^()$ http://wwwAAAcom/$1 [R=301L]
须注意的就是:htaccess这个文件基本在传到本地是不能直接被修改的,我们可以采用修改成htaccesstxt的形式来进行访问编 辑,把要写的代码写好之后,直接把htaccesstxt传上空间,再把htaccesstxt直接用FTP修改成htaccess文件名,这 样就可以升效啦!
2、window的虚拟主机IIS的服务器,需要有安装 ISAPI_Rewrite这个组件。(咨询主机商是否支持)如果支持,则先2个域名都解析到同一个IP,然后在httpdini文件开始处加入以下规则:
代码:
RewriteCond Host:^AAA\com$
RewriteRule () http\://www\AAA\com$1 [R,I]
如果采用以上代码不可行,请你尝试下这个代码:
代码:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^hongtaoseo\com$
RewriteRule () http\://www\hongtaoseo\com$1 [I,RP]
对于大部分虚拟主机是不支持这样的操作,那么这时候怎么办?
以上301重定向的操作方式并非是必须的,如果主机不支持,采用以下的方式也是同样可以达到效果。
1、如果是全新的域名和网站,也就是没带www的域名暂时没有被收录,那么可以采用没带www的域名转发到带www的域名上。在域名管理后台设置转发,国内的一些域名商也不允许转发了。
2、如果网站已经存在一段时间,没带www的域名也被收录了很多页面,则采用带www和不带www的域名同时解析到网站的IP。然后,网站的主导航,分类,或次导航等一些比较重要的位置,尽可能采用带www的绝对地址。
总结:因为人们的上网习惯 主要主域名也是带WWW的把不带WWW的和其他的多个域名可以转向到主域名之中。
在nginx下不支持htaccess的,这个文件会被直接隐藏。如果你在服务器里面可以尝试list -al 可以看到。
rewriteconf 创建这种文件来写规则吧。
需要服务器支持才可以设置伪静态。
网站设置成伪静态需要一些必备条件:
1、网站程序支持设置伪静态。
2、web服务器支持设置伪静态。
3、必须要有伪静态规则文件。
这里的WEB服务器不是指的硬件上的区别,而是软件上的,不同的WEB服务器的程序有不同的伪静态模块或者插件,介绍几款主流的WEB服务器以及相应的伪静态文件。
比如IIS60以前的伪静态插件叫ISAPI_rewrite,而且不同的插件版本对伪静态文件的支持也有所区别,ISAPI_rewrite3以前的版本只支持httpdini伪静态文件,从ISAPI_rewrite3开始支持htaccess伪静态文件。
从IIS70开始伪静态的设置可以使用URL Rewrite Module插件也可以不使用插件进行设置,如果使用URL Rewrite Module这个插件就可以直接支持htaccess的伪静态文件,如果不使用插件设置步骤比较复杂,所使用的伪静态文件就是webconfig。
恐怕还得你自己计算。
其中打开。htaccess文件是磁盘IO操作。这个跟磁盘读写速度有关,
然后正则匹配也是需要时间的。其余的时间可以忽略不计
可以这么计算下 假设你的访问量是X,X是指具体的访问的页面量。也就是你动态生成了多少次页面。
然后假设你的网站的平均深度为y,也就是说有几级目录。因为服务器每下一层目录都会查看该目录下有没有htaccess文件。如果有就调用,如果没有就不掉用。
如果你的目录平均深度为y,但是htaccess只在最高几层,或者中间几层,或者最低一层,都对访问有影响。然后假设用户平局访问到y层第t级目录中包含htaccess文件
也就是说用户访问下来共需要让服务器查询htaccess文件t次。然后t次然后正则匹配时间暂时设为常数c
磁盘查询时间w,磁盘度操作时间r
总时间=x (yw+tr);
一般来说w~=r y~=t
总时间=2xtr;
其中tr可以用c语言循环10000次读txt文件计算出来如果算出的时间是T
那么 总开销=xt/5000 秒
0条评论