regex - htaccess 重定向和别名根文件夹
问题描述
我在 webroot 中有一个名为foo
at的文件夹.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/ and
bar.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]
解决方案
如果您使用的是 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]
推荐阅读
- java - 属性 [project] 标有矛盾的注释
- r - dplyr:在 for 循环中获取分组的最小和最大列
- python - 在 Django Model 数据库函数中使用 Unaccent
- java - 我无法使用 Selenium 启动浏览器
- python - 按值而不是引用在列表中分配值
- smtp - 为什么即使在配置 SMTP 之后 prestashop 电子邮件也无法正常工作?
- algorithm - 从给定数字中获取所有可能的操作组合的算法
- html - 背景图像未使用 CSS 显示
- c++ - 如何为我的游戏设置主菜单场景?QT C++
- node.js - 如何使用 listObjectV2 和 NodeJs 从 S3 AWS 获取对象列表?