带有RewriteMap的Apache RewriteRule

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}在右侧使用,但我可以在左侧使用它,如果是这样,怎么样?

mat*_*pie 7

在地图文件中,左侧是键,右侧是值.创建匹配地图的规则时,输入密钥并输出值.

将您的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),则运行下一个规则.否则,跳过规则并继续.

Apache RewriteMap

  • @ gms8994:您应该验证PHP脚本中的实际输入,而不是重写映射. (2认同)