WEB开发网
开发学院服务器WEB服务器Apache Apache的ReWrite的应用 阅读

Apache的ReWrite的应用

 2008-10-23 00:00:00 来源:WEB开发网   
核心提示: 方案:只须重定向URL /到/e/www/即可,这个方案看起来很简单,Apache的ReWrite的应用(2),但只是有了mod_rewrite模块的支持,它才简单,应该这样写:代码:RewriteEngine onRewriteBase /~quux/RewriteRule ^foo$ foo

方案:

只须重定向URL /到/e/www/即可。这个方案看起来很简单,但只是有了mod_rewrite模块的支持,它才简单,因为传统的URL Aliases机制(由mod_alias及其相关模块提供)只是作了一个前缀匹配,DocumentRoot是一个对所有URL的前缀,因而无法实现这样的重定向。而用mod_rewrite的确很简单:

代码:

RewriteEngine on

RewriteRule ^/$ /e/www/ [R]

后缀斜杠的问题

说明:

每个网管对引用目录后缀斜杠的问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是/~quux/foo而不是/~quux/foo/,服务器会去找一个叫foo的文件,而它是一个目录,所以就报错了。事实上,大多数情况下,它自己会试图修正这个错误,但是有时候需要你手工纠正,比如,在重写了许多CGI脚本中的复杂的URL以后。

方案:

解决这个微妙问题的方案是让服务器自动添加后缀的斜杠。对此,必须使用一个外部的重定向,使浏览器正确地处理后继的对诸如图片的请求。如果仅仅作一个内部的重写,可能只对目录页面有效,而对内嵌有使用相对URL的图片的页面则无效,因为浏览器有请求内嵌目标的可能。比如,如果不用外部重定向,/~quux/foo/index.html页面中对image.gif的请求,其结果将是/~quux/image.gif!。

所以,应该这样写:

代码:

RewriteEngine on

RewriteBase /~quux/

RewriteRule ^foo$ foo/ [R]

又懒又疯狂的做法是把这些写入其宿主目录中的顶级.htaccess中,但是须注意,如此会带来一些处理上的开销。

代码:

RewriteEngine on

RewriteBase /~quux/

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(.+[^/])$ $1/ [R]

上一页  1 2 3 4 5 6 7  下一页

Tags:Apache ReWrite 应用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接