1

職場では、あるマシンから別のマシンに移行された ViewVC システムがあります。バージョンもアップしました。古いシステム/cgi-bin/viewvc.cgiはすべての URL のベースとして使用され、新しいシステムは/viewvc. ホスト名はそのままです。

ViewVC リンクを含む多くのドキュメントがあり、以前と同じように機能することを望みます。私は日中ソフトウェア開発者なので、Apache の専門家ではありませんが、それmod_rewriteが正しいルートだと思いました。残念ながら、私はそれを自分のやりたいようにさせることができないようです。

変更を加えていない場合、URL にアクセスすると/cgi-bin/viewvc.cgi404 が返されます。Apache のログには次のように表示されます。

==> /var/log/httpd/error_log <==
[Thu May 31 03:13:10 2012] [error] [client 172.16.3.52] script not found or unable to stat: /var/www/cgi-bin/viewvc.cgi

==> /var/log/httpd/access_log <==
172.16.3.52 - - [31/May/2012:03:13:10 +0100] "GET /cgi-bin/viewvc.cgi HTTP/1.1" 404 289 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.17 Safari/536.11"

RewriteEngine以下のように/RewriteRuleエントリを追加すると/etc/httpd/httpd.conf...

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all

    RewriteEngine on
    RewriteRule ^/cgi-bin/viewvc.cgi(.*) /viewvc$1
</Directory>

403 が表示されます。ログの内容は次のとおりです。

==> /var/log/httpd/error_log <==
[Thu May 31 03:15:35 2012] [error] [client 172.16.3.52] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/cgi-bin/viewvc.cgi

==> /var/log/httpd/access_log <==
172.16.3.52 - - [31/May/2012:03:15:35 +0100] "GET /cgi-bin/viewvc.cgi HTTP/1.1" 403 293 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.17 Safari/536.11"

上記の Options 行を編集して含めるFollowSymLinksSymLinksIfOwnerMatch、404 に戻ります。

==> /var/log/httpd/error_log <==
[Thu May 31 03:17:20 2012] [error] [client 172.16.3.52] script not found or unable to stat: /var/www/cgi-bin/viewvc.cgi

==> /var/log/httpd/access_log <==
172.16.3.52 - - [31/May/2012:03:17:20 +0100] "GET /cgi-bin/viewvc.cgi HTTP/1.1" 404 289 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.17 Safari/536.11"

私は何を間違っていますか?ルールが間違っていますか、それとも間違った場所に配置していますか? mod_rewrite彼も正しいアプローチですか?

バージョン: 重要な場合のために、私は次のパッケージを含む Fedora 17 マシンを使用しています。

  • httpd-2.2.22-4.fc17.x86_64
  • viewvc-1.1.13-2.fc17.noarch
  • viewvc-httpd-wsgi-1.1.13-2.fc17.noarch
4

1 に答える 1

0

私自身の質問に答えると、問題は、1) パターン マッチのピリオドをエスケープする必要があり、2) ルールを間違った場所に配置したことです。cgi-bin の下ではなく、トップ レベルに配置する必要がありました。


完了するために、これが私がそれをどのように解決したかです:

書き換えエンジンが何をしているかを正確に確認できるように、書き換えログを有効にしました。

RewriteLog /tmp/rewrite.log
RewriteLogLevel 9

元の書き換えルールを使用すると、これがログに記録されます。

127.0.0.1 - - [02/Jun/2012:23:43:49 +0100] [localhost/sid#b76f4018][rid#b6d4a058/initial] (2) init rewrite engine with requested uri /cgi-bin/viewcvs.cgi
127.0.0.1 - - [02/Jun/2012:23:43:49 +0100] [localhost/sid#b76f4018][rid#b6d4a058/initial] (3) applying pattern '^/cgi-bin/viewvc.cgi(.*)' to uri '/cgi-bin/viewcvs.cgi'
127.0.0.1 - - [02/Jun/2012:23:43:49 +0100] [localhost/sid#b76f4018][rid#b6d4a058/initial] (1) pass through /cgi-bin/viewcvs.cgi

ピリオドをエスケープするようにルールを変更した場合:

RewriteRule ^/cgi-bin/viewvc\.cgi(.*) /viewvc$1

これをログに記録しました。

192.168.1.64 - - [03/Jun/2012:00:08:53 +0100] [192.168.1.128/sid#b76ed018][rid#b6d39058/initial] (2) init rewrite engine with requested uri /cgi-bin/viewvc.cgi/
192.168.1.64 - - [03/Jun/2012:00:08:53 +0100] [192.168.1.128/sid#b76ed018][rid#b6d39058/initial] (3) applying pattern '^/cgi-bin/viewvc\.cgi(.*)' to uri '/cgi-bin/viewvc.cgi/'
192.168.1.64 - - [03/Jun/2012:00:08:53 +0100] [192.168.1.128/sid#b76ed018][rid#b6d39058/initial] (2) rewrite '/cgi-bin/viewvc.cgi/' -> '/viewvc/'

だからそれはむき出しの「。」でした。それはそれを一致させていませんでした。しかし、これはドキュメントによると「任意の単一文字」であるため、なぜ機能しないのかは不明でした。

書き換えガイドは至る所でそれらを回避しますが、それが必要な理由やその理由を示すものはありません。これは残念です.

于 2012-06-06T14:47:34.527 に答える