0

CGI ファイルをドキュメント ルートおよび Web サーバーとして公開しようとしています。サーバーが CGI スクリプトを実行しているという事実を公開したくありません。

URLをApache2にhttp://host/index.cgi/戻すにはどうすればよいですか? http://host/mod-rewrite が関係していると思いますが、まだすべてのドキュメントを読み終えていません。

次の構成は機能していますが、より完全な解決策があると思います。

RewriteEngine ON
Redirect /index.cgi/    /
4

2 に答える 2

1

しかし、より完全な解決策があると思います:

/index.cgi/へのリクエストをにリダイレクトする場合は/、他に何も必要ありません。RewriteEngine Onは mod_rewrite の一部であり、Redirectディレクティブは mod_alias の一部であることに注意してください。リダイレクトが機能するために書き換えエンジンは必要ありません。また、これは 302 リダイレクトであり、永続的なものではないことに注意してください。おそらくそこに301またはpermanentキーワードのいずれかを含めたいと思うでしょう:

Redirect 301 /index.cgi/ /

さらに、このRedirectディレクティブは 2 つのパス ノードをリンクするため、ソースに追加されたパスがさらに宛先に追加されます。したがって、上記を考えると、次のようになります。

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

ブラウザは次の場所にリダイレクトされます。

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

これを望まない場合は、Redirectを aに変更してRedirectMatch、正規表現を使用できます。

RedirectMatch 301 ^/index\.cgi/$ /
于 2012-08-29T03:46:22.637 に答える
0

mod-rewrite を使用した正しい解決策。

  • CGI スクリプトを更新して、URL を目的のパスに書き換えます。これは、またはのような URL がindex.cgi/path/app1/path私の場合は/path. virutal-root私のスクリプトには、グローバルな変更を行うというオプションがありました。

  • 次に、次のディレクティブを使用して Apache を更新します。これは、CGI スクリプトを含むようにすべての URL を内部的に書き換えますが、実際のスクリプトへの URL は無視します。

    RewriteEngine ON
    RewriteCond %{REQUEST_URI}    !^/index.cgi
    RewriteRule ^(.*)$            /index.cgi/$1   [PT]
    
  • 問題点の 1 つは、CGI スクリプトがサーバー上の静的ファイルを参照する場合、それらのファイルを書き換えルールから外れたパスに配置する必要があることです。たとえば、RewriteRule の前に別のパスを除外します。

    RewriteCond %{REQUST_URI}     !^/_static
    
于 2012-08-30T01:29:59.977 に答える