当省略尾部斜线时,Apache请求包含完整的物理path

我最初的目标是重写请求http://server.com/node/XXXXX http://server.com/node/index.cgi?XXXXXnode实际上是一个包含index.cgi的物理目录,位于文档根目录下。 这一点相当简单:

 AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI RewriteEngine On RewriteBase /node RewriteCond %{REQUEST_FILENAME} !index.cgi RewriteRule ^(.*)$ /node/index.cgi?$1 [L,QSA] 

/real/path/to/web/stuff/node下的.htaccess文件中。

请注意,这意味着请求的formshttp://server.com/node/提供一个空的查询stringindex.cgi ,这是我想要的。

所以现在是棘手的部分:我想请求http://server.com/noderedirect到http://server.com/node/ – 如上所述,redirect到index.cgi与一个空的QS。 麻烦的是,如果我没有任何规则在我的根目录, http://server.com/node //server.com/node确实似乎去http://server.com/node/ – 但我发现给index.cgi的查询string是与请求对应的完整物理path( /real/path/to/web/stuff/node )!

我试过一个规则,在我的根级 .htaccess像:

 RewriteCond %{REQUEST_URI} =/node RewriteRule ^(.*)$ /node/ [L] # (also tried [L,R=302]) 

但是这没有效果。

我知道,Apache做了一些尾随斜线附加在引擎盖下,但我不能使用DirectorySlash Off …我不想如果我可以,因为我有一个Drupal安装驻留在根(有一个如果类似的重写规则在那里,但我不认为他们干涉)。

那么是否可以创build一个适用于根目录.htaccess的规则,或者修改/node/.htaccess来使其不重要? 即使身体移动也不是没有道理的。

这是在FreeBSD 7.3上运行Apache 1.3.41的主机上。 我没有能力改变任何关于服务器configuration本身,只有我的.htaccess文件(这意味着我甚至不能打开重写日志!)。

Apache 1.3文档有一个条目,指的是“尾随斜线问题” ,也许它可以帮助你的情况。

关于你的规则与节点ID,RewriteBase也许是你的问题,因为“本地目录前缀被剥离…和你的重写规则只作用于其余的” RewriteBase文档中logging 。