如何禁用301重定向,在Apache中为目录名添加尾部斜杠

kru*_*z05 10 apache mod-rewrite apache2 url-rewriting

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/
Run Code Online (Sandbox Code Playgroud)

在所有情况下,这是一个很好的行为,但我需要为一个特殊文件夹(不是所有)关闭此功能,并且无法找到我能做到的.

搜索"重写"规则告诉founds什么都没有 - 只有指令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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

已解决 问题已解决.这是我的错误 - 我将SVN存储库置于DocumentRoot文件夹下,因此apache和web_dav无法理解,谁必须处理请求.这至少适用于TortoiseSVN客户端.

SVN开发人员的评论:

这意味着您的httpd.conf配置错误.通常,当您将Subversion虚拟"位置"定义为同时存在于两个不同的范围内时,会发生此错误.

例如,如果您已导出存储库,但您还将DocumentRoot设置为/ www,那么您就遇到了麻烦.当请求进入/ www/foo/bar时,apache不知道是否在DocumentRoot中找到名为/ foo/bar的真实文件,或者是否要求mod_dav_svn从/ www/foo中获取文件/栏库.通常前一种情况胜出,因此"永久移动"错误.

解决方案是确保您的存储库不会重叠或存在于已作为普通Web共享导出的任何区域内.

您也可能在Web根目录中有一个与存储库URL同名的对象.例如,假设您的Web服务器的文档根目录是/ var/www,而您的Subversion存储库位于/ home/svn/repo.然后,您可以将Apache配置为在http://local.host/myrepo上为存储库提供服务.如果您随后创建目录/ var/www/myrepo /这将导致301错误发生.

gpo*_*ojd 12

使用mod_dir的DirectorySlash指令.来自docs的示例:

# see security warning in docs
<Location /some/path>
    DirectorySlash Off
    SetHandler some-handler
</Location>
Run Code Online (Sandbox Code Playgroud)

  • 要关闭所有目​​录重定向,只需将其添加到没有位置条件的.htaccess文件中 (2认同)