如何在省略尾部斜杠时停止 URL 重定向?

How to stop URL redirect when trailing slash is omitted?

我写了 htaccess 重写规则来从另一个文件夹中获取内容。例如:如果 URL 是 http://test.com/folder2/folder3/ 则索引文件从 folder1/folder2/folder3 目录加载。在这种情况下一切正常,但如果我省略 URL 中的尾部斜杠,即如果 URL 是 http://test.com/folder2/folder3,则 URL 被重定向到 http://test.com/folder1/folder2/folder3/ .如何在不更改 URL 的情况下从 folder1/folder2/folder3 加载内容?

重写规则为:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(folder2/.*)$ folder1/ [L]

这是由于 mod_dir 模块 运行 在 mod_dir 之后,并在重写的 URI 上添加了尾部斜杠。您可以将 htaccess 更改为:

Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine on
RewriteBase /

# add trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/folder1/ -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=302,NE]

RewriteRule ^(folder2/.*)$ folder1/ [L,NC]

我通过在每个 URL 上强制添加尾部斜杠找到了问题的解决方案。所以,.htaccess 文件是:

Options +FollowSymLinks
RewriteEngine on

# Force Trailing Slash
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

RewriteRule ^(folder2/.*)$ folder1/ [L]