2).通过自定义HTTP Module或 HTTP Handler来重写 URL;
3).借助正则表达式来重写URL:
理解重写的方式:
创建自定义 HTTP 模块和 HTTP 处理程序是相对简单的任务,包括创建实现正确接口的托管类。HTTP 模块必须实现 System.Web.IHttpModule 接口,而 HTTP 处理程序和 HTTP 处理程序工厂必须分别实现 System.Web.IHttpHandler 接口和 System.Web.IHttpHandlerFactory 接口。创建 HTTP 处理程序和 HTTP 模块的细节超出了本文的范围。要获得详细的背景知识,请阅读 Mansoor Ahmed Siddiqui 的文章 HTTP Handlers and HTTP Modules in ASP.NET。
创建了自定义 HTTP 模块或 HTTP 处理程序之后,必须将其注册到 Web 应用程序。为整个 Web 服务器注册 HTTP 模块和 HTTP 处理程序仅需在 machine.config 文件中进行简单的添加即可;而为特定 Web 应用程序注册 HTTP 模块或 HTTP 处理程序包括向应用程序的 Web.config 文件中添加几行 XML。
特别要说明的是,要将 HTTP 模块添加到 Web 应用程序,应在 Web.config 的 configuration/system.web 部分添加以下几行:
常见的有三种方法来实现url重写:如下1、关于rewrite模块的调用:
Apache 2.x 中URL重写,是通过mod_rewrite.so 来实现的,所以您要查看您的Apache 是否已经被编译进去这个模块了,并且在Apache的配置文件httpd.conf 中已经调用了这个模块。在大多数主流发行版中,Apache 2.x 是把rewrite模块已经编入进去了。比如我用的是Slackware。Apache 2.x的配置文件,放在 /etc/httpd 目录下。
在 httpd.conf 中,我们会发现类似如下的一行,是有关rewrite模块的,模块名是 mod_rewrite.so 。
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
或
LoadModule rewrite_module lib/apache2/modules/mod_rewrite.so 如果前面有#号,您要去掉。对于大多数发行版来说,Apache 2的模块一般是位于如下的两个位置
/usr/lib/apache2/modules
或
/usr/lib/httpd/modules 如果在httpd中打开调用rewrite_module的设置,查看一下是不是能调用了,要通过 httpd -M的参数来查看;
#/usr/sbin/httpd -M
如果发现有如下一行,说明模块已经能被调用了
rewrite_module (shared)
2、设置DocumentRoot的Directory:
在Apache 2.x 中,我们会看到 DocumentRoot设置的一行。这行就是存放网页程序的地方。比如LinuxSir.Org 存放在 /opt/www 目录中。那么我们就要设置 DocumentRoot为如下的。
DocumentRoot "/opt/www" 然后我们再还要对 DocumentRoot做针对性的行为设置。在一般的情况下,httpd.conf 会给一个默认的。如果你要改 DocumentRoot的路径,同时也要改针对DocumentRoot的Directory的设置,也就是
<Directory "DocumentRoot所设置的路径">
比如我们把DocumentRoot的路径改为了 "/opt/www",那我们也要把Directory做针对性的行为设置也要改成这个路径。
<Directory "/opt/www">
Options FollowSymLinks
#AllowOverride None 注:把这行前面加#号,然后加下面的一行 ,也就是 AllowOverride ALL
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>我们把AllowOverride 的参数设置为ALL,表示整台服务器上的,都支持URL规则重写。Apache 服务器要读每个网站根目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则,则不会有任何效果。在一般的情况下,成熟的Web 服务器应用套件,都支持URL重写的,比如drupal和joomla 。当我们用这些程序时,会发现在安装包中有 .htaccess中有这个文件。我们把Apache配置好后,只是需要在这些程序的后台打开此功能就行了。
3、重启httpd服务器:
在一般情况下,在各个发行版中,都有httpd服务器启动脚本,比如
# /etc/rc.d/rc.httpd restart 注:Slackware Linux
# /etc/init.d/apache2 restart 注:ubuntu、Debian 等;
# /etc/init.d/httpd start 注:Fedora 、Redhat、CentOS
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。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)