我有一个 RewriteMap
,如下所示:
Guide 1
Mini-Guide 2
White Paper 3
我将它包含到 Apache
via
RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt
我想创建一个 RewriteRule
,它只允许来自所述 RewriteMap
左侧的值位于此位置;
RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2
我知道我可以在右侧使用 ${legacy}
,但我可以在左侧使用它吗?如果可以,如何使用?
最佳答案
在映射文件中,左侧是键,右侧是值。当您创建与 map 匹配的规则时,您输入键,它输出值。
将您的 RewriteRule 更改为:
# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
/blah.php?subsection=${legacy:$1}&title=$2
第一个分组捕获传入 URL 中的字符串。替换中的 $1 将其应用于指定的映射。要设置默认值,请将 ${legacy:$1}
更改为 ${legacy:$1|Unknown}
。
最后,如果您只希望规则对映射文件中的值起作用,请添加 RewriteCond
:
RewriteCond ${legacy:$1|Unknown} !Unknown
# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
/blah.php?subsection=${legacy:$1}&title=$2
条件表示如果 map 不返回默认值(未知
),则运行下一个规则。否则,跳过该规则并继续。
关于Apache RewriteRule 与 RewriteMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909438/