Apache mod_substitute 仅替换第一次出现的情况

问题描述 投票:0回答:1

我对 Apache HTTP Server 还很陌生。

我正在使用 mod_substitute 来转换 url,例如

http://www.example.com/appName/...

进入

http://www.example.com**/root**/appName/... 

我的问题是处理类似

的网址
http://www.example.com/appName/.../appName.js

因为我的重写规则

SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|/appName|/root/appName|i"

将上面的url转换为

http://www.example.com/root/appName/.../root/appName.js

这将导致 404 错误。

有没有办法只用 mod_substitute 替换第一个出现的地方?

如有任何建议,我们将不胜感激。

regex apache mod-rewrite substitution httpserver
1个回答
0
投票

我对 mod_substitute 并不明确熟悉,并且文档没有提到它使用什么风格的正则表达式,但是您需要将其分解为至少两种情况:URL 以 /appName/ 开头,或者 URL 以 $ 开头SCHEME://www.example.com/appName 因此类似于:

Substitute "s/((?:['\"])\/appName\/|(?:www.example.com)\/appName\/|\/root/appName/i"

(?:...)
前缀定义匹配但不替换的模式)。

注意我还没有测试过这个。语法看起来很像 sed - 我强烈建议您在 apache 配置中尝试之前先尝试使用 sed。

© www.soinside.com 2019 - 2024. All rights reserved.