我对 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 替换第一个出现的地方?
如有任何建议,我们将不胜感激。
我对 mod_substitute 并不明确熟悉,并且文档没有提到它使用什么风格的正则表达式,但是您需要将其分解为至少两种情况:URL 以 /appName/ 开头,或者 URL 以 $ 开头SCHEME://www.example.com/appName 因此类似于:
Substitute "s/((?:['\"])\/appName\/|(?:www.example.com)\/appName\/|\/root/appName/i"
(
(?:...)
前缀定义匹配但不替换的模式)。
注意我还没有测试过这个。语法看起来很像 sed - 我强烈建议您在 apache 配置中尝试之前先尝试使用 sed。