Apache 请求在省略尾部斜杠时包含完整的物理路径

Apache 请求在省略尾部斜杠时包含完整的物理路径

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]

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

请注意,这意味着表单的请求http://server.com/node/向提供一个空的查询字符串index.cgi,这正是我想要的。

现在到了棘手的部分:我希望将请求http://server.com/node重定向到http://server.com/node/— 如上所述,它将index.cgi使用空 QS 重定向到。问题是,如果我的根目录中没有任何规则,则对的请求http://server.com/node确实似乎会转到http://server.com/node/— 但我发现给出的查询字符串index.cgi是与请求相对应的完整物理路径 ( /real/path/to/web/stuff/node)!

我尝试过一条规则根级别 .htaccess喜欢:

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

但这并没有什么效果。

我意识到 Apache 在后台进行了一些尾随斜杠附加,但我不能使用DirectorySlash Off...并且如果可以的话我也不想这样做,因为我在根目录中安装了 Drupal(其中有一堆类似的重写规则,但我不认为它们会造成干扰)。

那么,是否可以为根目录创建一个.htaccess有效的规则,或者修改它/node/.htaccess以使其不受影响?即使物理上移动东西也并非不合理。

这是在 FreeBSD 7.3 上运行 Apache 1.3.41 的主机。我无法更改服务器配置本身的任何内容,只能更改我的.htaccess文件(这意味着我甚至无法打开重写日志!)。

答案1

Apache 1.3 文档有一个提到“尾部斜杠问题”的条目,也许它可以帮助你解决这种情况。

关于您的节点 ID 规则,RewriteBase 可能是您的问题,因为“本地目录前缀被剥离...并且您的重写规则仅对其余部分起作用”,如RewriteBase 文档

相关内容