Gle*_*rry 2 apache mod-rewrite rewritemap
我有一个RewriteMap看起来像这样:
Guide 1
Mini-Guide 2
White Paper 3
Run Code Online (Sandbox Code Playgroud)
我把它包括在Apachevia中
RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt
Run Code Online (Sandbox Code Playgroud)
我想创建一个RewriteRule只允许来自左侧的值RewriteMap处于此位置的值;
RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2
Run Code Online (Sandbox Code Playgroud)
我知道我可以${legacy}在右侧使用,但我可以在左侧使用它,如果是这样,怎么样?
在地图文件中,左侧是键,右侧是值.创建匹配地图的规则时,输入密钥并输出值.
将您的RewriteRule更改为:
# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
/blah.php?subsection=${legacy:$1}&title=$2
Run Code Online (Sandbox Code Playgroud)
第一个分组捕获传入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
Run Code Online (Sandbox Code Playgroud)
条件是说如果地图没有返回默认值(Unknown),则运行下一个规则.否则,跳过规则并继续.