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标准化,英文:urlcanonicalization来自matt cutts的博客文章:SEO advice: url canonicalization 中文翻译:SEO的建议:URL标准化 “URL标准化”是一个动名词,不好直接解释,我把它反过来一下:

标准化URL

很多情况下,我们认为以下这几个链接都指向同一个页面(首页):
但是从URL发送请求并返回网页内容的过程来看,这些URL都是互不相同的。对于上述URLs,Web服务器完全可以返回完全不同的内容。当这些URL所对应的内容都一样时(一般情况下都一样的),谷歌需要从上述URLs中选一个具有代表性的,而忽略其余的。那么这个被谷歌选择了的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,隐藏实际路径提高安全性。
⒉易于用户记忆和键入。
⒊易于被搜索引擎收录。

编辑本段重定向

制作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状态码)。

编辑本段新建方法

操作方法

具体操作办法(仅适用于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,在该类库中引用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框的内容。

处理引擎

Apache

  • mod_rewrite,Apache 官方的 URL Rewriting 模块
  • mod_alias,Apache 1.3 的 URL 别名模块
Microsoft Internet Information Server(IIS)
  • URL Rewrite Module for IIS 7.0,由微软官方发展
  • IIS Mod-Rewrite。
  • IISRewrite。
  • URL Replacer。
  • Ionic's ISAPI Rewrite Filter (IIRF),无须 .NET,免费的开放源代码组件。
  • .NET URL Rewriter and Reverse Proxy,免费的 URL Rewriting 与反向代理组件,支持 .NET 2.0/3.5,IIS 6.0/7.0。
  • [1]

2EEServlet

  • HttpRedirectFilter(开放源代码)。
  • UrlRewriteFilter(开放源代码-BSD)。

Lighttpd

网页技术与标准

文档呈现语言
 HTML  XHTML  XML  XForms
 DHTML      
 
样式格式描述语言
 层叠样式表  XSL    
 
动态网页技术
 CGI  FastCGI  ASP  ASP.NET
 ColdFusion  JSP  PHP  
 
客户端交互技术
 ActiveX  Java Applet  JavaFX  AJAX
 Silverlight  ActionScript  Flex  AIR
 
客户端脚本语言
 JavaScript  JScript  VBScript  ECMAScript
 
标识定位语言
 URL  URI  XPath  URL重写
 
文档纲要语言
 DTD  XML Schema    
 
 订阅微信公众号
架构师之旅
开发架构群: 开发架构探索(一区)
原文地址:https://www.cnblogs.com/Code-Engineering/p/5745442.html