如何在省略尾部斜杠时停止 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]
我写了 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]