标题：URL重写
概述
URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说，如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”，这样的URL，这样的网址可以更好的被网站所阅读。
如果浏览器不支持Cookie或用户阻止了所有Cookie，可以把会话ID附加在HTML页面中所有的URL上，这些页面作为响应发送给客户。这样，当用户单击URL时，会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
一般来说，URL重写是支持会话的非常健壮的方法。在不能确定浏览器是否支持Cookie的情况下应该使用这种方法。然而，使用URL重写应该注意下面几点：
1.如果使用URL重写，应该在应用程序的所有页面中，对所有的URL编码，包括所有的超链接和表单的action属性值。
2.应用程序的所有的页面都应该是动态的。因为不同的用户具有不同的会话ID，因此在静态HTML页面中无法在URL上附加会话ID。
3.所有静态的HTML页面必须通过Servlet运行，在它将页面发送给客户时会重写URL。[1]
URL标准化
概述URL标准化，英文：url canonicalization来自matt cutts的博客文章：SEO advice: url canonicalization 中文翻译：SEO的建议：URL标准化 “URL标准化”是一个动名词，不好直接解释，我把它反过来一下：标准化URL很多情况下，我们认为以下这几个链接都指向同一个页面（首页）：
但是从URL发送请求并返回网页内容的过程来看，这些URL都是互不相同的。对于上述URLs，Web服务器完全可以返回完全不同的内容。当这些URL所对应的内容都一样时（一般情况下都一样的），谷歌需要从上述URLs中选一个具有代表性的，而忽略其余的。那么这个被谷歌选择了的URL，就是一个标准化的URL。谷歌选择的这个过程称为“标准化”。
URL重写
根据不同的服务器就会有不同的URL重写规则，比如 iis apache nginx 这三种重写方式都是不同的，并非完全一样的。
动态链接静态化
概述这是SEO过程中经常碰到的问题，也是必须解决的问题。因为搜索引擎喜欢静态页面。从Web服务器的角度，这个问题转变为：如何将静态化的文件名称转化成参数。需要两步来处理⒈把网页上带链接的地方，都换上新的静态化链接。搜索引擎和浏览器将通过该链接来发生请求。（有些人做修改不是在网页上，而是进行动态链接向静态链接的转向，这是严重错误的）
⒉在httpd.conf或.htaccess中使用RewriteRule：
RewriteRule "^/dir/ ([^./]*) \.html" "/dir/script.cgi?doc=$1" [PT]
[PT]标记告诉Apache执行后续的所有操作。
通过这个功能，使动态页面以静态链接的形式展示给搜索引擎，从而达到URL优化的目的。
好处
功能好处重写URL是非常有用的一个功能，因为它可以让你提高搜索引擎阅读和索引你的网站的能力；而且在你改变了自己的网站结构后，无需要求用户修改他们的书签，无需其他网站修改它们的友情链接；它还可以提高你的网站的安全性；而且通常会让你的网站更加便于使用和更专业。重写式跟踪当客户机不接受cookie时，server就使用URL重写作为会话跟踪的基本方式.URL重写，添加了附加数据(会话ID)到请求的URL路径上.
会话ID必须被编码作为该URL字符串中的路径参数。该参数的名称为jsessionid,
例如：
index.html;jsessionid=1234
优点
⒈缩短url，隐藏实际路径提高安全性。
⒉易于用户记忆和键入。
⒊易于被搜索引擎收录。
URL重定向
制作404页面很多时候，我们考虑把无效的URL比如：用户拼错的URL、不存在的URL重定向到别的网页，例如网站的首页、404页面等。
在httpd.conf或.htaccess文件中使用ErrorDocument来捕获404 （找不到文件）错误：
ErrorDocument 404 /index.html 
DirectoryIndex index.html /path/to/notfound.html 
本功能会让所有的404错误——每次当某人请求无效的URL 时，都返回URL / index.html 提供的网站首页。注意事项⒈直接指向首页是否是合适的？或者让它指向到一个404页面会更好些？如果在404页面用javasctrip做一个跳转到首页，也是SEO允许的做法。
⒉即使返回有效的文件，仍然会将404 状态码返回给客户端和搜索引擎。这表示搜索引擎机器人来确认网站上的链接时，仍然会得到正确的结果（404状态码）。
创建新URL
操作方法具体操作办法（仅适用于apache网络服务器）：
文件位置：apache->conf->httpd.conf
请在httpd.conf中使用Alias指令：
Alias /newurl /www/htdocs/oldurl
如：用户访问新的地址/newurl/id34.html 服务器将提供的内容原地址是/www/htdocs/oldurl/id34.html。
注意：Alias只会改变本地URL，如/newurl/id34.html 的/newurl/id34.html 部分，而无法改变URL的主机名称部分若要更改URL的主机名称部分，请使用Redirect或RewriteRule指令。
菜鸟指南：本功能的Alias指令在 httpd.conf中是这一句：#Alias /webpath /full/filesystem/path 去掉前面的#，并做下相应的修改即可。SEO用到功能⒈当文件移动或文件目录名称发现改变，出于SEO需要，你需要保持旧的URL；
⒉网站改版了，网站导航和链接发生变化，为了继续持有原链接带来的流量，你需要保持旧的URL；
⒊你希望不同的人用不同URL来链接同一个的内容。（SEO一般不建议这样做）
URL重定代码
截获请求代码⒈要重写，首先是截获url请求，然后分析当时的url,最后跳转到相应的页面.所以我们第一步是要截获url请求.为此新建一个类库叫URL，在该类库中引用URLRewriter.dll.新建一个类myrewritter.cs，代码如下
namespace URL
{
public class myrewritter : URLRewriter.BaseModuleRewriter
{
protected override void Rewrite(string requestedPath,HttpApplication app)
{
if (requestedPath.Contains("news/2011/3/2.html"))
app.Context.RewritePath("/news.aspx?id=2&year=2011&month=3");
else
app.Context.RewritePath("/here.aspx");
}
}
}
可以看到该类继承了URLRewriter.BaseModuleRewriter。只要当前的url请求是news/2011/3/2.html，我们就会将页面重写到/news.aspx?id=2&year=2011&month=3.
这只是一个简单的例子，实际上对于url的判断，一般是用正则表达式来完成.而页面和页面间的对应关系，可能需要通过查询数据库完成.web.config代码接下来在网站项目中引用这个类库.然后修改下web.config，下面的：
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<httpModules>
<add type="URL.myrewritter" name="URL" />
</httpModules> 
<compilation debug="true" /> 
<authentication mode="Windows" />
</system.web>
</configuration>步骤总结大家可以看到我新加了个httpModules.这个的作用是，如果有url请求，asp/net会先把请求传到你指定的这个类中来.add那一行了，前面的是要接收请求的类，后面的是这个类所在的dll的名字.
添加完这一句后，一切就快结束了.由于我们要处理的是.html的页面，所以需要配置下iis.因为默认asp/net的处理引擎不会管.html.我们要做的是用处理asp .net的那个程序来处理html页面.打开iis.找到你的网站，点右键打开属性.找到主目录（Home Directory），打开配置（Configuration）对话框. 在Application extensions列表里找到.aspx，点击编辑（Edit...），复制Executable框的内容。