RewriteMap 值部分中的空格

RewriteMap 值部分中的空格

这个问题与Apache RewriteMap 中的 URL 包含空格,无法正常工作,但在这种情况下,问题在于价值地图的一部分,而不是钥匙部分。假设我有这个条目:

/a-normal-url/    /a-less-normal url/

作为RewriteMap一个txt文件之间用空格分隔,这样就无法正常工作。因此,我尝试去掉空格:

/a-normal-url/    /a-less-normal%20url/

不幸的mod_rewrite是将有助于逃避重定向目标,所以这将导致请求被重定向到/a-less-norma%2520url/,这也不是我想要的。

为了以防万一,我还使用了反斜杠来转义空格 ( /a-less-normal\ url/),但不出所料,这也没有帮助(/a-less-normal%5c在这种情况下它将重定向到 ( )。

答案1

我在写这个问题的时候实际上就已经意识到答案是什么了(小黄鸭调试的经典案例)。

NE只需在实际使用重写映射的输出中添加标志RewriteRule,如下所示:

# Define the RewriteMap
RewriteMap redirect_map "txt:redirect_map.txt"

# Look up the requested URI in the redirect map. If the result is not empty...
RewriteCond ${redirect_map:%{REQUEST_URI}} ^(.+)$

# ...then use the mapped value for the redirect, without percent-encoding it
RewriteRule . %1  [R=301,L,NE]

相关内容