Apache RewriteRule 与 RewriteMap

标签 apache mod-rewrite rewritemap

我有一个 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 RewriteMap

关于Apache RewriteRule 与 RewriteMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909438/

相关文章:

java - 动态重写规则。 Apache 汤姆猫

regex - 如何在rewritecond中匹配www和非www?

mysql - RewriteMap MapType dbd 的问题

apache - 您知道使用 Apache 而不是 Nginx 的任何理由吗?

linux - 使用 Specweb 2009 对 Apache 进行基准测试

java - maven-surefire-plugin 虚拟 :dummy. jar :1. 0 丢失

java - 在tomcat上运行java应用程序

apache - RewriteRule (contact.php -> contact) + 404 重定向总是给我一个 404 页面

apache - 基于浏览器语言的 404 页面与 mod_rewrite 如何

php - 设置 apache RewriteMap 以从数据库中提取的正确方法是什么? (PHP/APACHE/MySQL)