这是旧的 URI 模式
/release-(\w+)/(\w+)/(.*)
,其中第一个和第二个正则表达式模式始终相同,示例如下:
/release-foo/foo/(.*)
/release-bar/bar/(.*)
它们被合并在一个文件夹下(即
/release
),在新版本中:
ROOT
└── release
├── foo
│ ├── ...
│ └── ...
├── bar
│ ├── ...
│ └── ...
└── ...
有了这个
RewriteRule
配置:
RewriteRule "^/release-(\w+)/(\w+)/(.*)$" "/release/$1/$3" [L]
所有这些重定向都有效:
/release-foo/foo/(.*)
=> /release/foo/(.*)
:这是有意的/release-foo/bar/(.*)
=> /release/foo/(.*)
:这是不允许的/release-foo/baz/(.*)
=> /release/foo/(.*)
:这是不允许的我的问题是我可以在这里放什么作为
RewriteCond
?这有可能吗?
RewriteCond expr "$2 == $1" <-- what do I need to put here?
RewriteRule "^/release-(\w+)/(\w+)/(.*)$" "/release/$1/$3" [L]
RewriteCond expr "$2 != $1" <-- what do I need to put here?
RewriteRule "^/release-(\w+)/(\w+)/(.*)$" "/release-$1/$1/$3" [R,L]
我想做的是检查
RewriteCond
中的两个反向引用,如果$2 is equal to $1
(例如/release-foo/foo/
)让它被处理。但如果它们不同(例如 /release-foo/bar/
),则从外部将其重定向到正确的 URI。我需要RewriteCond
否则它会陷入无限循环。
我已经尝试了Apache HTTP Server中的表达式中的几乎所有内容,甚至硬编码也不起作用,如下所示:
RewriteCond expr "$2 == 'foo'"
非常感谢任何指点。
一个高级/巧妙的技巧是您可以在表达式中用作反向引用。
RewriteRule "^/release-(\w+)/\1/(.*)$" "/release/$1/$2" [L]