首页 > 解决方案 > htaccess 重定向和别名根文件夹

问题描述

我在 webroot 中有一个名为fooat的文件夹.com/foo/*/。我正在尝试做一些事情。我希望foo可以通过.com/bar/*和访问文件夹的内容.com/bar/baz/*。但是,我还想将流量重定向.com/foo/*到,.com/bar/*以便用户迁移到新端点。这个想法是不要在打开应用程序的情况下破坏当前用户。

我有这些规则在分开时有效,但是当同时使用它们时,我只会得到一个重定向循环。我相信事情应该更多地与适当的标志结合起来,但我似乎无法找出适当的组合。

RewriteRule ^foo/(.*)$ /bar/$1 [R=302,NC,L]

RewriteRule ^bar/baz/(.*)$ bar/$1 [QSA]
RewriteRule ^bar/(.*)$ foo/$1 [QSA]

编辑1:

.com/bar/并将.com/bar/baz/在内部正确指向真实目录foo

但是“.com/ andbar.com/bar/baz foo” will not point correctly to the real directory。规则是可修复的还是强制使用斜杠会更好?

RewriteRule ^foo/(.*)$ /bar/$1 [R=307,NC,L]

RewriteRule ^bar/baz/(.*)$ foo/$1 [NC,END]
RewriteRule ^bar/(.*)$ foo/$1 [NC,END]

标签: regexapache.htaccessmod-rewrite

解决方案


如果您使用的是 Apache 2.4+,那么您可以使用END

RewriteEngine On

RewriteRule ^foo/(.*)$ /bar/$1 [R=302,NC,L]

RewriteRule ^bar/baz/(.*)$ bar/$1 [NC,END]

RewriteRule ^bar/(.*)$ foo/$1 [NC,END]

如果您使用的是旧的 Apache,例如 2.2 等,请使用:

RewriteCond %{THE_REQUEST} \s/+foo/ [NC]
RewriteRule ^foo/(.*)$ /bar/$1 [R=302,NC,L]

RewriteRule ^bar/baz/(.*)$ bar/$1 [NC,L]

RewriteRule ^bar/(.*)$ foo/$1 [NC,L]

推荐阅读