使index.cgi重定向到Apache webserver文档根目录

时间:2012-08-29 03:28:35

标签: apache mod-rewrite cgi

我正在尝试将CGI文件公开为我的文档根目录和Web服务器。我不想暴露服务器正在运行CGI脚本的事实。

如何在Apache2中将网址http://host/index.cgi/映射回http://host/?我猜它涉及mod-rewrite,但我还没有完成grokking所有的文档。

以下配置正在运行,但我猜测有更完整的解决方案:

RewriteEngine ON
Redirect /index.cgi/    /

2 个答案:

答案 0 :(得分:1)

  

但我猜测有更完整的解决方案:

如果您想将/index.cgi/的请求重定向到/,那么实际上不需要其他任何内容。请注意,RewriteEngine On是mod_rewrite的一部分,Redirect指令是mod_alias的一部分。您不需要重写引擎来重定向工作。另请注意,这是302重定向,并不是永久重定向。您可能希望在其中包含301permanent个关键字:

Redirect 301 /index.cgi/ /

此外,Redirect指令将两个路径节点链接在一起,因此附加到源的任何其他路径都会附加到目标。如上所述,如果你去:

http://host/index.cgi/some/more/path.txt

浏览器将重定向到:

http://host/some/more/path.txt

如果您不想这样做,可以将Redirect更改为RedirectMatch并使用正则表达式:

RedirectMatch 301 ^/index\.cgi/$ /

答案 1 :(得分:0)

使用mod-rewrite纠正解决方案。

  • 更新CGI脚本以将URL重写为所需路径。这意味着像index.cgi/path这样的网址会更改为/app1/path,或者就我而言只会更改为/path。对于我的脚本,有一个名为virutal-root的选项进行了全局更改。

  • 然后使用以下指令udpate Apache。它的作用是在内部重写所有URL以包含CGI脚本,但忽略转到实际脚本的URL。

    RewriteEngine ON
    RewriteCond %{REQUEST_URI}    !^/index.cgi
    RewriteRule ^(.*)$            /index.cgi/$1   [PT]
    
  • 一个棘手的问题是,如果CGI脚本引用服务器上的任何静态文件,则需要将它们放在一个也不在重写规则之内的路径中。例如,在RewriteRule:

    之前排除另一条路径
    RewriteCond %{REQUST_URI}     !^/_static