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

如何在Apache中禁用将尾部斜杠添加到目录名的301重定向,apache,mod-rewrite,url-rewriting,apache2,Apache,Mod Rewrite,Url Rewriting,Apache2,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/ 在所有情况下,这都是一个很好的行为,但我需要为一个特殊文件夹(并非所有文件夹)关闭此功能,并且找不到我可以做到的地方 搜索“Rewrite

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/
在所有情况下,这都是一个很好的行为,但我需要为一个特殊文件夹(并非所有文件夹)关闭此功能,并且找不到我可以做到的地方

搜索“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>
LoadModule dav_svn_module/opt/libexec/mod_dav_svn.so
LoadModule authz_svn_module/opt/libexec/mod_authz_svn.so
名称虚拟主机*:8000
服务器管理员admin@some.host.org
ServerName some.host.org
DocumentRoot/path/to/wwwroot
DAVLockDB/opt/var/lock/davlock/svndavlockdb
选项跟随符号链接索引
##不允许超过任何值
命令允许,拒绝
通融
选项跟随符号链接索引
不允许超限
命令允许,拒绝
通融
CustomLog/path/to/wwwroot/log/access\u log.txt组合
ErrorLog/path/to/wwwroot/log/error\u log.txt
#不允许超限
#发动机熄火
#重写选项AllowNoSlash
目录删除
DAV svn
SVNParentPath/path/to/wwwroot/svn
#SVNListParentPath打开
AuthType Basic
AuthName“Subversion存储库”
授权关闭
AuthUserFile/path/to/wwwroot/svn/.htauthfile
需要有效用户
UPD2似乎“DirectorySlash Off”指令仅适用于“some.host.org/svn”,而不适用于“some.host.org/svn/repo1”、“some.host.org/svn/repo2”等-子目录不继承此选项

UPD3我尝试将以下几行添加到配置中,但结果是相同的——“DirectorySlash Off”仅适用于“/svn”,不适用于child

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

目录删除
已解决 问题解决了。这是我的错误-我将SVN存储库根目录放在DocumentRoot文件夹下,所以apache和web_dav无法理解谁必须处理请求。这至少适用于TortoiseSVN客户端

SVN开发者的评论:

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

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

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

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

使用mod_dir。文档中的示例:

# see security warning in docs
<Location /some/path>
    DirectorySlash Off
    SetHandler some-handler
</Location>
#参见文档中的安全警告
目录删除
SetHandler某个处理程序
添加

DirectorySlash Off

.htaccess
对我来说很好。

要打开所有目录重定向,只需将其添加到.htaccess文件中,而不带位置条件