精华内容
参与话题
问答
  • UrlRewrite---实现url伪静态化

    万次阅读 2013-02-17 14:59:28
    UrlRewrite  A Java Web Filter for any compliant web application servers (such as Tomcat,JBoss, Jetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very ...

    UrlRewrite

       A Java Web Filter for any compliant web application servers (such as Tomcat,JBossJetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very powerful tool just like Apache's mod_rewrite.

        使用UrlRewrite有三大好处:

        一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的
    话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多 
        二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL 
        三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息 
        

        UrlRewrite的用法:

        1. 首先下载jar包。从官网http://tuckey.org/urlrewrite/上下载下来urlrewrite-3.2.0.jar(本人使用的版
    本,但不是最新版本,建议使用最新版本)。然后把jar包放到你的web项目的WEB-INF/lib下面。
        2. 配置web.xml。 它的配置如下:
    <filter>
    	<filter-name>UrlRewriteFilter</filter-name>
    	<filter-class>org.tuckey.web.filters.urlrewriter.UrlRewriteFilter</filter-class>
    	<init-param>
    		<param-name>logLevel</param-name>
    		<param-value>WARN</param-value>
    	</init-param>
    </filter>
    <filter-mapping>
    	<filter-name>UrlRewriteFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    	<dispatcher>REQUEST</dispatcher>
    	<dispatcher>FORWARD</dispatcher>
    </filter-mapping>


        3. 在WEB-INF下面新建urlrewrite.xml(注意都是小写)。其配置如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
    "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
    <urlrewrite>
    	<rule>
    		<from>^/(.*)$</from>
    		<to type="redirect">/$1.jsp</to>
    	</rule>
    	<outbound-rule>
    		<from></from>
    		<to></to>
    	</outbound-rule>
    </urlrewrite>

             rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。

    例如下面的配置:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
            "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
    <urlrewrite>
        <rule>
            <from>^/page/(.*)$</from>
            <to type="redirect">/page/$1.action</to>
        </rule>
    </urlrewrite>
     
    这样在浏览器中输入此url:http://localhost:8080/page/test
    就相当于访问:http://localhost:8080/page/test.jsp

        UrlRewrite jar包下载地址

        如果官网下载不下来的话,请到这个连接()下载。

    展开全文
  • 1.首先在...2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下 3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下 4.在web.xml文件中加入filter

     

    1.首先在http://tuckey.org/urlrewrite/#download下载urlrewirtefilter

    2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下

    3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下

    4.在web.xml文件中加入filter

     
    1. <filter>  
    2. <filter-name>UrlRewriteFilter</filter-name>  
    3.    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  
    4.    <init-param>  
    5.     <param-name>logLevel</param-name>  
    6.     <param-value>WARN</param-value>  
    7.    </init-param>  
    8. </filter>  
    9. <filter-mapping>  
    10.    <filter-name>UrlRewriteFilter</filter-name>  
    11.    <url-pattern>/*</url-pattern>  
    12. </filter-mapping>  

     

    5.配置urlrewrite.xml
    1.普通url静态化 例如:
    要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置:

     
    1. <rule>  
    2. <from>^/user/list.html</from>  
    3.    <to type="redirect">/user/list.jsp</to>  
    4. </rule>  


    当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面,在servlet的跳转要这样写:response.sendRedirect("./user/list.html");

    2要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成http://localhost/prjtest/user/view/1_admin.html在urlrewrite.xml中这样配置:

     
    1. <rule>  
    2. <from>^/user/view/([0-9]+)_([a-z]+).html$</from>  
    3. <to type="redirect">/user/view.jsp?cid=$1cname=$2</to>  
    4. </rule>  

    6特别说明
    为什么地址栏不变?
    原因就在于浏览器显示的是最后被给定的URL。当一个URL被提交后,在某一个组件返回一个相应给浏览器之前,你的应用可能转发请求多次。所有这些都发生在服务器端,浏览器并不知道发生了什么事。当一个Http相应被放回时,它并没有包含地址信息,所以浏览器仅仅显示用来作为初始请求的地址。

    要想让地址栏也变成静态化的URL,很简单,将<to type="redirect">改成<to type="forward">即可

     

    /-------------------------------------------------------------------------------

    /-------------转jsp相同,需要修改的地方是:------------------------------

    <filter-mapping>
            <filter-name>struts2 </filter-name>
            <url-pattern>*.do </url-pattern>
            <dispatcher>REQUEST </dispatcher>
          <dispatcher>FORWARD </dispatcher>
          <dispatcher>INCLUDE </dispatcher>
        </filter-mapping>

    1.1URLRewirte的用处
    1.满足搜索引擎的要求。

    2.隐藏技术实现,提高网站的移植性。

    3.满足美感的要求(个人感觉这个用处太牵强)。

     

    1.2项目部署
    1.首先在http://tuckey.org/urlrewrite/下载urlrewirtefilter,现在有2.6.0和3.2.0两个版本,这里我选择的是前面一个稳定版本。

    2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下,然后编译。

    3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下

    4.在web.xml文件中加入以下:

    1 <!-- 动态地址静态化 -->

    2 <filter>

    3   <filter-name>UrlRewriteFilter</filter-name>

    4   <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

    5   <init-param>

    6     <param-name>logLevel</param-name>

    7     <param-value>WARN</param-value>

    8   </init-param>

    9 </filter>

    10 <filter-mapping>

    11   <filter-name>UrlRewriteFilter</filter-name>

    12   <url-pattern>/*</url-pattern>

    13 </filter-mapping>
     


    5.需要配置urlrewrite.xml文件来实现url静态化,下面将详细说明

     

    1.3 如何静态化
    到这里相关的配置已经完成,下面看如何把动态地址静态化:

    (1)普通url静态化

    例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html

    这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置:

    1 <rule>

    2   <from>^/user/list.html</from>

    3   <to>/user/list.jsp</to>

    4 </rule>
     


    当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面

    在servlet的跳转要这样写:

    response.sendRedirect("./user/list.html");

    (2)带参数的url静态化

    例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成

           http://localhost/prjtest/user/view/1_admin.html

    在urlrewrite.xml中这样配置:

    1 <rule>

    2   <from>^/user/view/([0-9]+)_([a-z]+).html$</from>

    3   <to>/user/view.jsp?cid=$1&cname=$2</to>

    4 </rule>
     


    当请求/user/view/1_admin.html这个页面时,实际上相当于请求/user/list.jsp?cid=1&cname=admin页面,在servlet的跳转要这样写(cid,cname为变量):

    response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html");

    注意:配置文件中用"&"来代替"&"。

    一个通用的正则表达式:[a-zA-Z0-9]+

    1.4 小结
           使用URLRewirte可以方便的进行地址伪静态化,配置规则也相对比较方便。不过在项目设计的时候需要制定地址匹配规则,以使在开发的过程中直接利用该规则进行编码。如果是对已有的项目进行地址伪静态化比较麻烦,需要对所有的页面、跳转进行修改,工作量较大,同时也容易忽略一些URL。

           一句话,其实它并没有达到静态化要求,只是相当于将地址进行了改写。

    展开全文
  • php实现url伪静态化,全过程详解

    千次阅读 2014-09-30 12:39:37
    url静态化,我一般借助于apache,nginx,htaccess等,很少用php来实现url静态化,用php来实现静态化比较麻烦,所以就个人而言是不推荐使用php来实现url静态化 一,url静态化实现的原理 1,通过程序来把动态...

    url的静态化,我一般借助于apache,nginx,htaccess等,很少用php来实现url的静态化,用php来实现静态化比较麻烦,所以就个人而言是不推荐使用php来实现url静态化

    一,url的静态化实现的原理

    1,通过程序来把动态的url转换成静态的url,转换方法最好是统一的接口。把静态的url放到html中,这样我们通过页面看到的就是静态的url。

    2,apache或者其他,加载rewrite模块,添加重写规则。这样当我们点页面中的静态url时,就可以转向正确的url了。虽然执行的还是php文件,但是浏览器的地址栏中显示出来的,还是静态的url。

    如果用php来实现url静态化,也要保持地址栏里面也要静态的url,这个比较麻烦的,下面就这个来举个简单的例子。

    二,把动态url转换成静态url

    1. <?php  
    2.   
    3. //将url转换成静态url  
    4. function url_rewrite($file,$params = array (),$html = "",$rewrite = true) {    
    5.   
    6.  if ($rewrite) {       //开发阶段是不要rewrite,所在开发的时候,把$rewrite = false  
    7.  $url = ($file == 'index') ? '' : '/' . $file;  
    8.  if (!emptyempty ($params) && is_array($params)) {  
    9.  $url .= '/' . implode('/'$params);  
    10.  }  
    11.  if (!emptyempty ($html)) {  
    12.  $url .= '.' . $html;  
    13.  }  
    14.  } else {  
    15.  $url = ($file == 'index') ? '/' : '/' . $file;  
    16.   
    17.  if (substr($url, -4) != '.php' && $file != 'index') {  
    18.  $url .= '.php';  
    19.  }  
    20.   
    21.  if (!emptyempty ($params) && is_array($params)) {  
    22.  $url .= '?' . http_build_query($params);  
    23.  }  
    24.  }  
    25.  return $url;  
    26. }  
    27.   
    28. echo url_rewrite('test.php',array('class'=>"User",'act'=>'check','name'=>'tank'));  
    29. //$rewrite = false的情况下,显示如下/test.php?class=User&act=check&name=tank  
    30.   
    31. echo url_rewrite('test.php'array ('class'=>"User",'act'=>'check','name'=>'tank'));  
    32. //$rewrite = true的情况下,显示如下/test.php/User/check/tank  
    33.   
    34. echo url_rewrite('test'array ('class'=>"User",'act'=>'check','name'=>'tank'));  
    35. //$rewrite = true的情况下,显示如下/test/User/check/tank  
    36.   
    37. echo url_rewrite('test'array ('class'=>"User",'act'=>'check','name'=>'tank'),'html');  
    38. //$rewrite = true的情况下,显示如下/test/User/check/tank.html  
    39. ?>  
    40. <a href="./test3<?php echo url_rewrite('test.php',array('class'=>"User",'act'=>'check','name'=>'tank'));?>">test</a>  

    上面简单的写了一个方法,把动态url转换成静态的url,页面中会产生链接如下:

    1. <a href="./test3/test.php/User/check/tank">test</a>  

    到这儿如果直接点击的话,肯定会报404错误的,因为根不可能找到tank这个目录的。难点也在这儿,所以我们要把找不到的目录和文件指定一个php文件。这个要利用到apache,nginx,或者htaccess等。

    三,指定一个统一入口

    1. RewriteCond %{REQUEST_FILENAME} !-f  //找不到文件  
    2. RewriteCond %{REQUEST_FILENAME} !-d  //打不到目录  
    3. RewriteRule . /test3/index.php [L]  

    不管你是以.htaccess的方式来实现,还是写在apache等的配置文件中,都是可以的。上面三句话是什么意思呢,如果找不到目录转到index.php文件,如果找不到文件,也转到index.php。

    这样做了,当我们访问http://localhost/test3/test.php/User/check/tank时候,就会转到index.php来,既然知道到那个php文件了,那就好办了。

    以下内容都是以http://localhost/test3/test.php/User/check/tank这种重写的方式来操作的,其他方式也都差不多。

    四,index.php文件

    1. <?php  
    2.   
    3. $filename = $_SERVER['REQUEST_URI'];  //请求的url  
    4.   
    5. /**请求的url,"/test3/test.php/User/check/tank" 
    6.  * test.php 要去的php文件 
    7.  * User 是class名 
    8.  * check 是class中的方法名 
    9.  * tank 是要传到check的参数*/  
    10.   
    11. preg_match("/(\w+\.php)/",$filename,$match);    //查找php文件名  
    12.   
    13. $array =  explode('/',$filename);       //将静态url进行分割  
    14.   
    15. $key  =  array_keys($array,$match[0]);  //得到文件所对应的下标Array ( [0] => 2 )  
    16. $file_array = array_slice($array,0,$key[0]+1);  //Array ( [0] => [1] => test3 [2] => test.php )  
    17. $param_array = array_slice($array,$key[0]+1);   //Array ( [0] => User [1] => check [2] => tank )   
    18.   
    19. $file_path = implode('/',$file_array);  
    20.   
    21. if($array[$key[0]] != "index.php"){  
    22.  include_once($array[$key[0]]);            //包函请求url中的php文件,在这里是test.php  
    23. }  
    24.   
    25. if(class_exists($param_array[0])){     //判断一下test.php这个文件中有没有User这个class  
    26.   
    27.  $obj = new $param_array[0];  
    28.  if(method_exists($obj,$param_array[1])){   //判断一下User这个class中有有没有check这个方法  
    29.  $obj->$param_array[1]($param_array[2]);  //调用这个方法,结果是(我的名子叫tank)  
    30.  }  
    31. }  
    32. ?>  

    五,test.php文件

    1. <?php  
    2.   
    3. class User {  
    4.  public function check($name){  
    5.  echo "我的名子叫".$name;  
    6.  }  
    7. }  
    8. ?>  

    到这儿,当我们访问http://localhost/test3/test.php/User/check/tank这个网址的时候,

    结果如下:我的名子叫tank,并且地址栏还仍然保持着静态。

    到这儿通过php,我们完成了一个简单的url的重写过程。其实还是借助了.htaccess,或者apache等,但是重写的规则没有在.htaccess,或者apache中。如果完全用php来实现url的静态化,个人感觉,不可能。

    展开全文
  • UrlRewrite  A Java Web Filter for any compliant web application servers (such as Tomcat,JBoss, Jetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very ...

    UrlRewrite

       A Java Web Filter for any compliant web application servers (such as Tomcat,JBossJetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very powerful tool just like Apache's mod_rewrite.

        使用UrlRewrite有三大好处:

        一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的
    话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多 
        二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL 
        三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息 
        

        UrlRewrite的用法:

        1. 首先下载jar包。从官网http://tuckey.org/urlrewrite/上下载下来urlrewrite-3.2.0.jar(本人使用的版
    本,但不是最新版本,建议使用最新版本)。然后把jar包放到你的web项目的WEB-INF/lib下面。
        2. 配置web.xml。 它的配置如下:
    [html] view plain copy
    1. <filter>  
    2.     <filter-name>UrlRewriteFilter</filter-name>  
    3.     <filter-class>org.tuckey.web.filters.urlrewriter.UrlRewriteFilter</filter-class>  
    4.     <init-param>  
    5.         <param-name>logLevel</param-name>  
    6.         <param-value>WARN</param-value>  
    7.     </init-param>  
    8. </filter>  
    9. <filter-mapping>  
    10.     <filter-name>UrlRewriteFilter</filter-name>  
    11.     <url-pattern>/*</url-pattern>  
    12.     <dispatcher>REQUEST</dispatcher>  
    13.     <dispatcher>FORWARD</dispatcher>  
    14. </filter-mapping>  


        3. 在WEB-INF下面新建urlrewrite.xml(注意都是小写)。其配置如下:
    [html] view plain copy
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"  
    3. "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">  
    4. <urlrewrite>  
    5.     <rule>  
    6.         <from>^/(.*)$</from>  
    7.         <to type="redirect">/$1.jsp</to>  
    8.     </rule>  
    9.     <outbound-rule>  
    10.         <from></from>  
    11.         <to></to>  
    12.     </outbound-rule>  
    13. </urlrewrite>  

             rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。

    例如下面的配置:
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"  
    3.         "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">  
    4. <urlrewrite>  
    5.     <rule>  
    6.         <from>^/page/(.*)$</from>  
    7.         <to type="redirect">/page/$1.action</to>  
    8.     </rule>  
    9. </urlrewrite>  
    10.    
    11. 这样在浏览器中输入此url:http://localhost:8080/page/test  
    12. 就相当于访问:http://localhost:8080/page/test.jsp  
    展开全文
  • 2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下 3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下 4.在web.xml文件中加入filter UrlRewriteFilter org.tuckey.web....
  • 1、下载urlrewritefilter-4.0.3.jar2、urlrewrite.xml /succ.html /succ.jsp 3、搭建项目 把urlrewritefilter-4.0.3.jar导入到项目lib目录下 把urlrewrite.xml导入到WEB-INF文件夹下4、配置web.xml ...
  • php url伪静态化解析

    2016-05-12 14:52:34
    1、大家来说说URL映射吧 一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index....
  • php实现url伪静态化

    2016-05-12 15:17:54
    url静态化,我一般借助于apache,nginx,htaccess等,很少用php来实现url静态化,用php来实现静态化比较麻烦,所以就个人而言是不推荐使用php来实现url静态化 一,url静态化实现的原理 1,通过程...
  • 是否看到别人的网站网址名都不带后缀名比较酷,比如qq空间的地址,其实用urlrewrite这个包很容易就实现了。 下面是使用说明: 1.下载urlrewrite,官方下载地址:...
  • 心提示:1.首先在 ...解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下 3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下 4.在web.xml文件中加入filter filte
  • php中如何设置404页面及其他错误页面 首先在项目根目录下新建文件,文件名为" .htaccess " 在该文件中写入一下配置项: ... 其他 401、500 等错误同理 注意点是:(参考) ... 不要将错误页面指向主页面,可...
  • 作为一个程序员,我们对action访问路径非常敏感,但是在开发或者在使用其它系统的时候,发现这些系统中的URL地址是静态的,并不会显示出真正的URL路径,对于刚开始跨入程序员这个领域的人,可能会感觉很苦恼,因为...
  • 关于ofbiz 集成urlrewritefilter实现url 伪静态化。 测试版本 ofbiz12.04 urlrewritefilter 4.0.3 步骤: 1.添加urlrewritefilter-4.0.3.jar到模块的lib目录。 2.添加过滤器到web.xml &lt;!-- ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是32位的,虽然可以设置IIS支持32位程序,不过还是希望找个更好的...
  • 最近项目seo那边提出,要将所有的URL都做成伪静态URL,虾米?有木有搞错!?项目都完成了好不好?改需求项目还不延期? 而且,我还是一个刚毕业的两百斤的宝宝好不好,我不会呀。。。 于是,我就百度了小半天,...
  • 做SEO的朋友现在都知道了,URL静态化URL伪静态、URL重写对SEO的重要性,搜索引擎喜欢静态的网站页面。今天我们来详细分析一下URL静态化URL伪静态、URL重写这三者的区别。  URL静态化。URL静态化 就是在你的...

空空如也

1 2 3 4 5 ... 20
收藏数 709
精华内容 283
关键字:

url伪静态化