尽管有 RewriteRule,Apache 还是添加了尾部斜杠

sid*_*yll 5 mod-rewrite .htaccess apache-2.4

我使用简单的.htaccess来处理 PHP 脚本的所有内容:

RewriteEngine on
RewriteRule . index.php
Run Code Online (Sandbox Code Playgroud)

我的 index.php目前只是回显服务器变量(带有 print_r($_SERVER));一切正常,我在 URL 中输入任何内容,然后 显示index.php内容。然而,考虑到这种结构:

test/           # document root
  folder/       # empty folder
  index.php
  .htaccess
Run Code Online (Sandbox Code Playgroud)

我注意到访问[site]/folder 首先将浏览器重定向到 [site]/folder/然后显示正确的index.php内容。为什么会发生这种情况?重写规则不是应该“按原样”重定向所有内容吗?

这与设置的虚拟主机一起使用以在本地测试网站。配置最低限度。在我的.htaccess之前是否可能加载其他 apache 文件?

<VirtualHost *:80>
    ServerName test.local
    DocumentRoot /Library/WebServer/Documents/test/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

当前使用 OS X 10.10。

Unb*_*ver 6

正如上面的评论所确定的,该DirectorySlash指令控制着这个特定的 Apache 行为,而重写规则并没有导致它。该指令默认为on。如果将其设置为off,则当请求映射到文件系统上目录的 URI 时不带尾部斜杠,Apache 不会将请求重定向到带尾部斜杠的 URI。

此处文档中的更多信息:https ://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash