RewriteBase指令,则必须在每个对应的.htaccess文件中指定RewriteRule 。
例如,目录级配置文件内容如下:
/abc/def/.htaccess -- /abc/def 目录的配置文件 注意:/abc/def 是 /xyz 的物理路径(例如存在一条''Alias /xyz /abc/def''指令)。 RewriteEngine On 让服务器知道我们使用的是 /xyz 而不是物理路径 /abc/def RewriteBase /xyz 重写规则 RewriteRule ^oldstuff\.htmlcontentnbsp; newstuff.html 注:上述例子中,对/xyz/oldstuff.html的请求被正确地重写为对物理文件/abc/def/newstuff.html的请求。
以下列出了内部处理的详细步骤:
请求: /xyz/oldstuff.html 内部处理过程: /xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias) /abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule) /abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase) /xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias) 结果: /abc/def/newstuff.html 虽然这个过程看来很繁复,但是由于目录级重写的到来时机已经太晚了,它不得不把这个(重写)请求重新注入到Apache核心中,所以Apache内部确实是这样处理的。但是:它的开销并不象看起来的那样大,因为重新注入完全在Apache服务器内部进行,而且这样的过程在Apache内部也为其他许多操作所使用。所以,你可以充分信任其设计和实现是正确的。 |