14

Apache 2.2.20 は、以下に示すように、ディレクトリを指し、末尾にスラッシュがないすべての要求を、末尾にスラッシュがある同じ URL に自動的にリダイレクトします。

GET /some/path/to/dir HTTP/1.1
Host: www.some.org
...

301 Moved permanently
Location: http://www.some.org/some/path/to/dir/

いずれの場合も問題ない動作ですが、(すべてではなく) 1 つの特別なフォルダーに対してこの機能をオフにする必要があり、それができるかどうかがわかりません。

'Rewrite' ルールを検索しても何も見つかりません - ディレクティブ LoadModule mod_rewrite.so だけです。また、ディレクトリ ツリーのディレクトリ サーバーに .htaccess ファイルがありません。物事を作る他のディレクティブはありますか?

UPD1次の構成でHTTP経由でSVNをセットアップしようとしています:

LoadModule dav_svn_module     /opt/libexec/mod_dav_svn.so
LoadModule authz_svn_module   /opt/libexec/mod_authz_svn.so

NameVirtualHost *:8000
<VirtualHost *:8000>
    ServerAdmin admin@some.host.org
    ServerName some.host.org
    DocumentRoot /path/to/wwwroot
    DAVLockDB /opt/var/lock/davlock/svndavlockdb

   <Directory /path/to/wwwroot>
        Options FollowSymLinks Indexes
#        #AllowOverride None
        Order allow,deny
        Allow from all
   </Directory>

   <Directory /path/to/wwwroot/svn>
        Options FollowSymLinks Indexes
        AllowOverride None
        Order allow,deny
        Allow from all
   </Directory>

    CustomLog /path/to/wwwroot/log/access_log.txt combined
    ErrorLog  /path/to/wwwroot/log/error_log.txt

    <Location /svn>

        #AllowOverride None
        #RewriteEngine Off
        #RewriteOptions AllowNoSlash
        DirectorySlash Off

        DAV svn
        SVNParentPath /path/to/wwwroot/svn
#        SVNListParentPath on

        AuthType Basic
        AuthName "Subversion Repository"
        AuthBasicAuthoritative Off
        AuthUserFile /path/to/wwwroot/svn/.htauthfile
        <Limit GET OPTIONS REPORT PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
            Require valid-user
        </Limit>
    </Location>

</VirtualHost>

UPD2「DirectorySlash Off」ディレクティブは「some.host.org/svn」でのみ機能し、「some.host.org/svn/repo1」、「some.host.org/svn/repo2」などでは機能しないようです- 子ディレクトリはこのオプションを継承しません。

UPD3次の行を構成に追加しようとしましたが、結果は同じです。「DirectorySlash Off」は「/svn」に対してのみ機能し、子に対しては機能しません。

<LocationMatch "/svn/.*">
    DirectorySlash Off
</LocationMatch>

解決済み 問題が解決しました。これは私の間違いです。SVN リポジトリのルートを DocumentRoot フォルダーの下に配置したため、apache と web_dav は理解できず、誰がリクエストを処理する必要があります。これは、少なくとも TortoiseSVN クライアントに適用されます。

SVN 開発者からのコメント:

これは、httpd.conf の構成が間違っていることを意味します。通常、このエラーは、Subversion の仮想 "場所" を 2 つの異なるスコープ内に同時に存在するように定義した場合に発生します。

たとえば、リポジトリを としてエクスポートし、DocumentRoot も /www に設定した場合、問題が発生します。/www/foo/bar に対する要求が届いたとき、Apache は DocumentRoot 内で /foo/bar という名前の実際のファイルを見つけるかどうか、または mod_dav_svn に /www/foo からファイル /bar をフェッチするように要求するかどうかを判断できません。リポジトリ。通常は前者のケースが優先されるため、"Moved Permanently" エラーが発生します。

解決策は、通常の Web 共有として既にエクスポートされている領域内にリポジトリが重複したり存在したりしないようにすることです。

また、Web ルートにリポジトリ URL と同じ名前のオブジェクトがある可能性もあります。たとえば、Web サーバーのドキュメント ルートが /var/www で、Subversion リポジトリが /home/svn/repo にあるとします。次に、 http://local.host/myrepoでリポジトリを提供するように Apache を構成します。その後、ディレクトリ /var/www/myrepo/ を作成すると、301 エラーが発生します。

4

2 に答える 2

13

mod_dir のDirectorySlash ディレクティブを使用します。ドキュメントの例:

# see security warning in docs
<Location /some/path>
    DirectorySlash Off
    SetHandler some-handler
</Location>
于 2012-11-13T01:16:22.520 に答える