关于URL重写,Apache上的URL Rewriting Guide是一个该功能的介绍,全是英文的,看着费劲,大伙谁能通俗易懂的说说怎么实现我的网站的URL重置功能,或者给个中文的参考说明也可。
项目是建立在J2EE的一个JSP网站。
开发工具是Eclipse。
关于URL重写,Apache上的URL Rewriting Guide是一个该功能的介绍,全是英文的,看着费劲,大伙谁能通俗易懂的说说怎么实现我的网站的URL重置功能,或者给个中文的参考说明也可。
项目是建立在J2EE的一个JSP网站。
开发工具是Eclipse。
可以找个中文版本的看,最终你还是得看懂。
http://man.chinaunix.net/newsoft/Apac...
开个头,说一种思路如何实现URL Rewriting:
首先定义一个统一入口main.jsp,所有发给apache的请求都转发给它,如下:
RewriteRule ^/(js|css|images)/(.+)$ /$1/$2?%{QUERY_STRING} [L]
RewriteRule ^(.+)$ /main.jsp?u=http://%{HTTP_HOST}$1&%{QUERY_STRING} [L]
第一行,所有静态内容直接请求静态文件。
第二行,通过main.jsp取到请求的url以及query string,那么你就可以随意使用硬盘的文件响应这个请求。
比如,http://www.domain.com/js/jquery.js 就直接请求硬盘上的jquery.js文件
而用户列表页面 http://www.domain.com/users?type=1 则被转发成
http://www.domain.com/main.jsp?u=http://www.domain.com/users&type=1
用户1的信息显示页面 http://www.domain.com/user/1?type=1 则被转发成
http://www.domain.com/main.jsp?u=http://www.domain.com/user/1&type=1
在main.jsp页面,通过获取query string,可以获得
参数u为http://www.domain.com/user/1,type为1
对u进行拆分,就能得到user和1,将user/1转发到
http://www.domain.com/user.jsp?id=1
即可获得user 1的信息了
以下文章由360weboy撰写, 原文地址:结合Mod Rewrite以及PHP生成优化的SEO url。 360weboy – 专注php web开发, web前端开发, 打造专业的php社区。希望本篇文章对你有所帮助,感兴趣的话可以加入360weboy的qq群-197642724,或者关注360weboy的新浪或者腾讯微博,大家在一起分享讨论开发中的技术以及思想,如发现文章有什么不对之处,请在评论中及时指出,如果确实有问题,我会及时纠正。
虽然我不是一个专业的做seo优化的,但是在我接触到的一些项目中,知道了一些实现seo的方法。要生成对于用户以及搜索引擎友好的url链接,据我目前所了解的有两种方式:
1. 结合Mod Rewrite以及PHP生成优化的SEO url
2. 在应用程序的前端控制器中通过路由来解析seo化的url,然后再将请求分发(dispatch)到具体的针对此次请求的控制器中进行处理
这边文章主要介绍 – 结合Mod Rewrite以及PHP生成优化的SEO url的方式。对于动态网站来说,静态化的url比较有利于搜索引擎收录,是站点seo比较重要的一部分。
首先让我们来看一个搜索引擎比较讨厌的常规的url – http://www.yoursite.com/product.php?p...
很明显,当用户看像以上的一个url的时候,根本弄不清楚当前在看那个产品的信息。所以,我们有必要将改url转变为以下形式的链接:
http://www.yoursite.com/product/13/3/...
用户看到以上的url的时候,至少可以知道当前看的产品是2GB的MP3播放器。我们使用Apache Mod Rewrite就可以实现上述url的转变。
我常常将这个转变过程概括为: 正在找什么以及要到哪去。
什么是Mod Rewrite?
维基百科上的解释如下:
URL重写 (URL Rewriting) 是一种REST的相关技术,它可以在 Web Server 中,针对用户所提供的 URL 进行转换后,再传入 Web Server 中的程序处理器。
示例
最常见的用法,就是将一组 URL 层次结构字符串,转换成带有 query string 的 URL,或是反向转换,例如:
http://www.somebloghost.com/Blogs/Pos...
经过 URL 重写后,可以变成:
http://www.somebloghost.com/Blogs/200...
另一个例子,下面的 URL:
http://www.somehost.com/Blogs/2006/12...
经过 URL 重写后,可转换成:
http://www.somehost.com/Blogs.aspx?ye...
因此,用户可以使用较直接的方式来输入 URL(这也是 REST 的主要目的),是搜索引擎优化(SEO)的作法之一。而应用程序开发者可以利用这个机制来将参数隐藏起来,可避免让网络上的恶意用户收集到有利于发动攻击的信息。
我个人的理解就是,在用户通过一个url访问你的程序的时候,web服务器会检查这个请求的链接是否符合一定的转换规则,并且根据规则的定义对该url进行转换。这意味着,请求最终还是product.php进行处理,但是用户或者搜索引擎看到的是完全不同的url。
重写URL的步骤
目前为止, 我们已经明白了什么是Mod Rewrite。接下来,我们来具体学习下如何进行重写url。第一步就是要创建一个.htaccess的文件并且将该文件放在你站点的根目录下(只适用于Linux的web服务器,对于win类型的貌似是不起作用的)。 接着,你需要在.htaccess加入下述代码:
RewriteEngine on RewriteRule ^article/([0-9]+)/([0-9]+)/(.*?).html$ /article.php?articleid=$1&categoryid=$2
我们来看下这两行代码具体什么意思。
RewriteEngine on
第一行代码告诉web服务器需要重写url, 不然服务器会抛出404错误。在你指定重写规则时,千万别忘了先加这行代码。
RewriteRule ^product/([0-9]+)/([0-9]+)/(.*?).html$ /product.php?productid=$1&categoryid=$2
第二行代码分为两部分: 第一个部分为一个正则表达式, 第二个部分为一个动态的url。 这两个部分结合起来告诉web服务器, 当解析的url符合规则 – ^product/([0-9]+)/([0-9]+)/(.*?).html$,那么将请求导向到/product.php?productid=$1&categoryid=$2。 就像我前面提到的,我把第一个部分理解正在找什么, 第二个部分理解为要到哪去。
第一部分 – 正在找什么?
上述的正则表达式就是定义了正在找什么。 让我们来把整个正则表达式分隔一下,将各个部分与我们一开始提到的url – http://www.yoursite.com/product/13/3/...:
1. ^product/告诉web服务器,视图匹配的url必须以product/这个字符串开头。这与url中的product/匹配。
2. 接下来的([0-9]+)告诉web服务器在/后面紧跟的是0-9之间的数字,该数字至少出现一次, 也就3. 是匹配的productid。 例如这个productid可以是1, 20, 567等等。
4. 继续匹配/, 然后又是一个([0-9]+), 道理一样,用来匹配categoryid
5. 继续匹配/, (.*?).html匹配任何以.html为后缀名,由任何数字或者字符为前缀
6. 最后,$表示匹配匹配字符串结尾
第二部分 – 到哪去?
这个就不用讲了,常规的动态url的解析。
好了,就是这么简单,至于怎么用php将项目中的url以seo化形式输出,相信大家都知道怎么做,就不写了。
以上文章由360weboy撰写, 原文地址:结合Mod Rewrite以及PHP生成优化的SEO url。 360weboy – 专注php web开发以及web前端开发, 努力打造专业的php社区。希望本篇文章对你有所帮助,感兴趣的话可以加入360weboy的qq群-197642724,或者关注360weboy的新浪或者腾讯微博,大家在一起分享讨论开发中的技术以及思想,如发现文章有什么不对之处,请在评论中及时指出,如果确实有问题,我会及时纠正。
2 回答1.5k 阅读✓ 已解决
2 回答921 阅读✓ 已解决
1 回答928 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答799 阅读
1 回答802 阅读✓ 已解决
3 回答1.1k 阅读
我用的开发框架是Struts2,使用urlrewrite的步骤是先引入相关的包,
然后在web.xml中使用如下配置.
下面是urlrewrite.xml配置。
希望对你有帮助.