欢迎各位兄弟 发布技术文章
这里的技术是共享的
前几天对网站的空间进行了更换,发现原有的 URL 重写已经无效了,原来使用的是 urlRewriter 实现的伪静态,在IIS6中实现 URL 重写大家可以参考下使用URLRewriter.dll实现url重定向。通过和客服沟通才认识到,在 IIS7中我们不再需要安装其他组件,通过在 web.config 进行简单的配置即可实现 URL 的伪静态。方法如下:
在 web.config 配置文件的 configuration 节点中加入下边的代码:
<system.webServer>
<rewrite>
<rules>
<rule name="rulename">
<match url="newurl" ignoreCase="false" />
<action type="Rewrite" url="oriurl" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
其中, rule 节点即为每个重写规则,match 节点为伪静态的规则;ignoreCase 是忽略大小写;action 是响应的 URL,即真正的URL;appendQueryString 为是否跟参数。添加多个 rule 时,注意 name 名称应该保持不同。
以下直接给出本站的 URL 重写规则,相信大家会一目了然:
<rewrite>
<rules>
<rule name="rule1">
<match url="articles/(\S+)\.html$" ignoreCase="true" />
<action type="Rewrite" url="articles/Default.aspx?SubClass={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
可见,在 IIS6 里如果跟参数的话使用 $ 字符,在 IIS7 使用{R:数字}代替 $ 字符。至于多个参数时,别忘记使用 & 替换 & 符号。
来自 http://www.jquery001.com/fullfill-urlrewriter-in-iis7.html
在 IIS7中我们不再需要安装其他组件,通过在 web.config 进行简单的配置即可实现 URL 的伪静态。方法如下:
在 web.config 配置文件的 configuration 节点中加入下边的代码:
代码如下 | 复制代码 |
<system.webServer> |
其中, rule 节点即为每个重写规则,match 节点为伪静态的规则;ignoreCase 是忽略大小写;action 是响应的 URL,即真正的URL;appendQueryString 为是否跟参数。添加多个 rule 时,注意 name 名称应该保持不同。
以下直接给出本站的 URL 重写规则,相信大家会一目了然:
代码如下 | 复制代码 |
<rewrite> |
可见,在 IIS6 里如果跟参数的话使用 $ 字符,在 IIS7 使用{R:数字}代替 $ 字符。至于多个参数时,别忘记使用 & 替换 & 符号。
如果你是iis6可参考下面方法来实例伪静态
我们需要下载微软官方提供的URLRewriter.dll,下载后将些dll文件引用到我们的项目中。接下来,需要在web.config里进行一些简单的配置,就可以实现url的重定向。
首先,在webconfig中找到configSections,在以下位置加入给出的代码:
代码如下 | 复制代码 |
</sectionGroup> |
接下来,找到httpHandlers,在以下位置加入给出的代码:
代码如下 | 复制代码 |
<httpHandlers> <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> |
上边加入的代码,就会对.html和.aspx后缀的url路径进行重定向。最后,我们要加入重定向的规则,从而实现url重定向。
代码如下 | 复制代码 |
</configSections> |
上边就是重定向的规则,上边是以我自己的小站为例。将domain/article/文章类型/发布时间/文章名称.html重新定向到了domain/article/default.aspx?Sub=文章类型&UrlName=文章名称 。我自己对正则也不是很了解,^_^。如果有兴趣大家可以学习下,最后别忘了要将 &UrlName中的&符号写成& ,
来自 http://www.111cn.net/sys/Windows/49624.htm
新建一个以web.config命名的文件内容为
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<!--将下面的规则添加到这里-->
</system.webServer>
</configuration>
规则示例,选择需要的规则添加:
<!--shopex-->
<rewrite>
<rules>
<rule name="disableDownloadThemeHtml">
<match url="^themes/.*.(html|xml)$" ignoreCase="false" />
<action type="CustomResponse" url="/" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="urlRewrite">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" pattern=".(html|xml|json|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|cgi|shtml|shtm|phtm)$" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="index.php?{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<!--dz2.0-->
<rewrite>
<rules>
<rule name="portal_topic">
<match url="^(.*/)*topic-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=topic&topic={R:2}&{R:3}" />
</rule>
<rule name="portal_article">
<match url="^(.*/)*article-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=view&aid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_forumdisplay">
<match url="^(.*/)*forum-(\w+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=forumdisplay&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_viewthread">
<match url="^(.*/)*thread-([0-9]+)-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=viewthread&tid={R:2}&extra=page%3D{R:4}&page={R:3}&{R:5}" />
</rule>
<rule name="group_group">
<match url="^(.*/)*group-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=group&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="home_space">
<match url="^(.*/)*space-(username|uid)-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&{R:2}={R:3}&{R:4}" />
</rule>
<rule name="home_blog">
<match url="^(.*/)*blog-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&uid={R:2}&do=blog&id={R:3}&{R:4}" />
</rule>
<rule name="forum_archiver">
<match url="^(.*/)*(fid|tid)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/index.php\?action={R:2}&value={R:3}&{R:4}" />
</rule>
</rules>
</rewrite>
<!--dz2.5-->
<rewrite>
<rules>
<rule name="portal_topic">
<match url="^(.*/)*topic-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=topic&topic={R:2}&{R:3}" />
</rule>
<rule name="portal_article">
<match url="^(.*/)*article-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=view&aid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_forumdisplay">
<match url="^(.*/)*forum-(\w+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=forumdisplay&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_viewthread">
<match url="^(.*/)*thread-([0-9]+)-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=viewthread&tid={R:2}&extra=page%3D{R:4}&page={R:3}&{R:5}" />
</rule>
<rule name="group_group">
<match url="^(.*/)*group-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=group&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="home_space">
<match url="^(.*/)*space-(username|uid)-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&{R:2}={R:3}&{R:4}" />
</rule>
<rule name="home_blog">
<match url="^(.*/)*blog-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&uid={R:2}&do=blog&id={R:3}&{R:4}" />
</rule>
<rule name="forum_archiver">
<match url="^(.*/)*(fid|tid)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/index.php\?action={R:2}&value={R:3}&{R:4}" />
</rule>
<rule name="plugin">
<match url="^(.*/)*([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/plugin.php\?id={R:2}:{R:3}&{R:4}" />
</rule>
</rules>
</rewrite>
<!--dz3.0-->
<rewrite>
<rules>
<rule name="portal_topic">
<match url="^(.*/)*topic-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=topic&topic={R:2}&{R:3}" />
</rule>
<rule name="portal_article">
<match url="^(.*/)*article-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/portal.php\?mod=view&aid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_forumdisplay">
<match url="^(.*/)*forum-(\w+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=forumdisplay&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="forum_viewthread">
<match url="^(.*/)*thread-([0-9]+)-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=viewthread&tid={R:2}&extra=page%3D{R:4}&page={R:3}&{R:5}" />
</rule>
<rule name="group_group">
<match url="^(.*/)*group-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/forum.php\?mod=group&fid={R:2}&page={R:3}&{R:4}" />
</rule>
<rule name="home_space">
<match url="^(.*/)*space-(username|uid)-(.+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&{R:2}={R:3}&{R:4}" />
</rule>
<rule name="home_blog">
<match url="^(.*/)*blog-([0-9]+)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/home.php\?mod=space&uid={R:2}&do=blog&id={R:3}&{R:4}" />
</rule>
<rule name="forum_archiver">
<match url="^(.*/)*(fid|tid)-([0-9]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/index.php\?action={R:2}&value={R:3}&{R:4}" />
</rule>
<rule name="plugin">
<match url="^(.*/)*([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+).html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/plugin.php\?id={R:2}:{R:3}&{R:4}" />
</rule>
</rules>
</rewrite>
来自 http://www.west263.cn/faq/list.asp?Unid=615
伪静态是个很好的东西,用处是非常大的,这点我就不用多讲了,论坛上讨论伪静态的很多,其实伪静态也不是什么神秘的东西,知道一些规则,用起来还是很方便的,关于规则的书写,网上有很多,大家可以研究研究。
以前因为测试环境的影响,一般都不是在本地测试的,都是放到真实的网站空间里调试的,这也给调试带来点小麻烦,上传下载的,有点浪费时间了,于是想在本地研究研究伪静态。
关于Windows 7下IIS7.5的伪静态的介绍好像很少,一般都是Vista下的IIS7.0,不过好在IIS7.0和IIS7.5差别并不是很大,不过对于我这个直接从IIS5.1跳到IIS7.5的人来说还是有点小麻烦的,从5.1到7.5变化还是蛮大的。
下面说下IIS7.5下伪静态(Rewrite)的安装,安装很傻瓜式的,下载这个组件,下载好了直接安装下就可以了。我是在IIS官网上下载的,我下的1.1版的现在2.0RC版已经出来了,不过为了稳定起见,我还是用的1.1,下载地址:http://www.iis.net/expand/URLRewrite
安装好了之后我们打开IIS,即可在网站IIS的配置中看到 URL rewrite的选项
双击URL rewrite图标(前提是先选定左边“网站”目录下你想使用伪静态的那个本地测试网站目录,如图),然后我们就进入到了rewrite管理页面;
然后我们就进入到了rewrite规则管理页面;
点击Add Rules后我们即可进入添加规则页面,当然最简单的处理方式就是在本地写好一个 *.htaccess 规则文件,然后点击Import Rules导入就OK了。
不过本地测试的rewrite规则和上传到空间里面的不一样,举个简单的例子,我在本地用的规制是RewriteRule coolsite.html LoadMod.asp?plugins=CoolSite
而在真实空间使用RewriteRule coolsite.html LoadMod\.asp\?plugins=CoolSite
才可以,有些我用到正则匹配写的规则也是本地与真实上传到空间的不一样,而且相对路径绝对路径的问题也让我摸索了一会儿,不知道是我写的规则有局限性还是原本就是这样,希望有高手能给我解答下。
没有在主博客里面测试,用的是我的测试博客调试的。
windows7已经是各位的标配了吧,那如何在windows7下实现wordpress的伪静态呢?
系统环境:windows7 + IIS7.5 + PHP + MySQL
安装URL重写组件
a. 检查URL重写组件
配置伪静态需要URL重写组件,首先确认一下IIS是否安装了URL重写组件。
在控制面板打开 Internet 信息服务(IIS)管理器,查看是否存在 “URL重写”,如下图:
b. 下载URL重写组件
无论是否安装,这里直接给一个微软官网的下载链接:
重启一下IIS,运行 “net stop iis” -> “net start iis”
配置 web.config 文件
在wordpress根目录,将以下内容保存为 web.config 文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="category">
<match url="category/?(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="/index.php?category_name={R:1}" appendQueryString="false" logRewrittenUrl="false" />
</rule>
<rule name="tags">
<match url="tag/?(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="index.php?tag={R:1}" />
</rule>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:0}" />
</rule>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule></rules>
</rewrite>
</system.webServer>
</configuration>
最后,刷新一下 wordpress ,打开几个链接看看,是不是正常了!