这个问题与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]