最新消息:伪静态技术大全博客开通啦!再也不为伪静态东奔西走!更多问题可以反映给博主:野狼,QQ1615241386 QQ交流群:112696646

把一个.htaccess格式的伪静态规则转化为web.config文件实战

伪静态规则实例 野狼 263浏览 0评论

经常遇到不同伪静态转化的问题,特别是这些年web.config的运用,让很多人头疼不已。我们知道微软的产品一向是比较脑残的,他IIS7.x是有自动转化工具的,但事实上,这个转化工具我只能呵呵了。完全不行。
今天就碰到我们自己的CMS,被人安装到IIS7.5的系统上,机房说规则错误,我一看哪是规则错误,完全就是IIS工具不行。所以没有办法就手动转化一下了。
.htaccess的规则原本是这样的:

<FilesMatch ".(bak|inc|lib|sh|tpl|lbi|dwt)$">
order deny,allow
deny from all
</FilesMatch>
RewriteEngine On
RewriteRule ^index.html$ index.php [L]
RewriteRule ^([a-zA-Z0-9/]+)/([0-9]+).html$ article.php?path=$1/$2.html [L]
#栏目页面排除
RewriteCond $1 !^(admin|yysAdmin|yysadmin|yelangbak|phpMyAdmin|s)
RewriteRule ^([a-zA-Z0-9/]+)/$ list.php?path=$1 [L]
RewriteRule ^([a-zA-Z0-9/]+)/list_([0-9]+).html$ list.php?path=$1&p=$2 [L]
RewriteRule ^sitemap.xml$ sitemap.xml.php [L]

手工转化了一下是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="r1">
<match url="^index.html$" ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
<rule name="r2">
<match url="^([a-zA-Z0-9/]+)/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="article.php?path={R:1}/{R:2}.html" appendQueryString="false" />
</rule>
<rule name="r3">
<match url="^([a-zA-Z0-9/]+)/$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{R:1}" pattern="^(admin|yysAdmin|yysadmin|s)" ignoreCase="true" negate="true" />
</conditions>
<action type="Rewrite" url="list.php?path={R:1}" appendQueryString="false" />
</rule>
<rule name="r4">
<match url="^([a-zA-Z0-9/]+)/list_([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="list.php?path={R:1}&amp;p={R:2}" appendQueryString="false" />
</rule>
<rule name="r5">
<match url="^sitemap.xml$" ignoreCase="false" />
<action type="Rewrite" url="sitemap.xml.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

测试了之后,完美匹配。

最后说一下一些转化技巧:


1、自动转化的时候,有些会把article.php 写成 article.php 从而导致报错。因为这样的链接是不需要转义的。
2、一般问号“?”需要转义,其他的一律不需要。
3、“&”需要写成“&amp; ”要不然会报错的。这个大家一定要注意。
4、.htaccess伪静态格式中的"$1"要改成“{R:1}”。
5、排除某些链接用以下语句,这个也是野狼找了很长时间才找到的,网上关于伪静态的知识真是少:
<conditions logicalGrouping="MatchAll">
<add input="{R:1}" pattern="^(admin|yysAdmin|yysadmin|s)" ignoreCase="true" negate="true" />
</conditions>

其中的一些英文的意思是:conditions 附属条件,意思是这是要满足的一个附加条件;ignoreCase:忽视大小写 ;negate:取消,使作废,这一条是关键,说明是排除的。

发表评论
请遵守网络文明公约,理性发言
访客头像

还没有人来评论,快来抢个沙发吧!