URL地址重写
2014-09-22 16:39
211 查看
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都是互不相同的。对于上述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,隐藏实际路径提高安全性。
⒉易于用户记忆和键入。
⒊易于被搜索引擎收录。
很多时候,我们考虑把无效的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页面用javascript做一个跳转到首页,也是SEO允许的做法。
⒉即使返回有效的文件,仍然会将404 状态码返回给客户端和搜索引擎。这表示搜索引擎机器人来确认网站上的链接时,仍然会得到正确的结果(404状态码)。
为什么使用URL地址重写?
因为有些浏览器的安全设置,禁用了session.而session的原理则是把session的ID保存在客户端的cookie中。所以这个时候如果cookie功能被禁用的话,所有使用session的功能将失效.如果采用url地址重写技术,则server会把session经过编码以后,写到url地址后面当做参数来传递.这样既提高了客户端的安全性,同时也避免了功能被屏蔽的风险.下面是一个使用url地址重写的servlet例子.其中核心代码为
resp.encodeURL(req.getRequestURL().toString());
Java代码
public class SessionTest extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
HttpSession session =req.getSession(true);// true代表先从客户端获取cookie
out.flush();
out.close();
/*
* session默认,也是要把sessionID写到客户端的内存当中(内存cookie)
* 重写地址,防止禁用cookie的时候,仍然可以使用session
*/
resp.encodeURL(req.getRequestURL().toString());
//地址编码,在url中,传递中文
org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(String s ,request.getCharacterEncoding());
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
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。
ISAPI_Rewrite。
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]
“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]
2标准化编辑
概述
URL标准化,英文:urlcanonicalization来自matt cutts的博客文章:SEO advice: url canonicalization 中文翻译:SEO的建议:URL标准化“URL标准化”是一个动名词,不好直接解释,我把它反过来一下:
标准化URL
很多情况下,我们认为以下这几个链接都指向同一个页面(首页):但是从URL发送请求并返回网页内容的过程来看,这些URL都是互不相同的。对于上述URLs,Web服务器完全可以返回完全不同的内容。当这些URL所对应的内容都一样时(一般情况下都一样的),谷歌需要从上述URLs中选一个具有代表性的,而忽略其余的。那么这个被谷歌选择了的URL,就是一个标准化的URL。谷歌选择的这个过程称为“标准化”。
3特别注意编辑
根据不同的服务器就会有不同的URL重写规则,比如 iis apache nginx 这三种重写方式都是不同的,并非完全一样的。
4静态化编辑
概述
这是SEO过程中经常碰到的问题,也是必须解决的问题。因为搜索引擎喜欢静态页面。从Web服务器的角度,这个问题转变为:如何将静态化的文件名称转化成参数。
需要两步来处理
⒈把网页上带链接的地方,都换上新的静态化链接。搜索引擎和浏览器将通过该链接来发生请求。(有些人做修改不是在网页上,而是进行动态链接向静态链接的转向,这是严重错误的)⒉在httpd.conf或.htaccess中使用RewriteRule:
RewriteRule "^/dir/ ([^./]*) \.html" "/dir/script.cgi?doc=$1" [PT]
[PT]标记告诉Apache执行后续的所有操作。
通过这个功能,使动态页面以静态链接的形式展示给搜索引擎,从而达到URL优化的目的。
5好处编辑
功能好处
重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力;而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接;它还可以提高你的网站的安全性;而且通常会让你的网站更加便于使用和更专业。
重写式跟踪
当客户机不接受cookie时,server就使用URL重写作为会话跟踪的基本方式.URL重写,添加了附加数据(会话ID)到请求的URL路径上.会话ID必须被编码作为该URL字符串中的路径参数。该参数的名称为jsessionid,
例如:
index.html;jsessionid=1234
6优点编辑
⒈缩短url,隐藏实际路径提高安全性。⒉易于用户记忆和键入。
⒊易于被搜索引擎收录。
7重定向编辑
制作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页面用javascript做一个跳转到首页,也是SEO允许的做法。⒉即使返回有效的文件,仍然会将404 状态码返回给客户端和搜索引擎。这表示搜索引擎机器人来确认网站上的链接时,仍然会得到正确的结果(404状态码)。
为什么使用URL地址重写?
因为有些浏览器的安全设置,禁用了session.而session的原理则是把session的ID保存在客户端的cookie中。所以这个时候如果cookie功能被禁用的话,所有使用session的功能将失效.如果采用url地址重写技术,则server会把session经过编码以后,写到url地址后面当做参数来传递.这样既提高了客户端的安全性,同时也避免了功能被屏蔽的风险.下面是一个使用url地址重写的servlet例子.其中核心代码为
resp.encodeURL(req.getRequestURL().toString());
Java代码
public class SessionTest extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
HttpSession session =req.getSession(true);// true代表先从客户端获取cookie
out.flush();
out.close();
/*
* session默认,也是要把sessionID写到客户端的内存当中(内存cookie)
* 重写地址,防止禁用cookie的时候,仍然可以使用session
*/
resp.encodeURL(req.getRequestURL().toString());
//地址编码,在url中,传递中文
org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(String s ,request.getCharacterEncoding());
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
处理引擎编辑
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。
ISAPI_Rewrite。
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]
相关文章推荐
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- ASP.NET中获取URL重写前的原始地址
- ecshop重写url地址
- Nginx 的编译安装和URL地址重写
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- ASP.NET中获取URL重写前的原始地址
- apache重写带有get参数的url地址
- ASP.NET中获取URL重写前的原始地址
- url重写以后保持postback地址
- Url地址重写利用HttpHander手工编译页面并按需生成静态HTML文件
- Discuz!NT 的URL地址重写(URLRewrite) [转]
- 利用URLRewriter重写url地址
- 使用IHttpHandler接口实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX
- apache2.2.21下为codeigniter配置url地址重写
- Farseer.net轻量级开源框架 中级篇:UrlRewriter 地址重写
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- UrlRewriter url 地址重写
- ASP.NET中获取URL重写前的原始地址详解
- [路由] -- Yii2 url地址美化与重写[2.0版本]