我正在努力的组织正在实施一个新的CMS。 因此,大量的URL(比方说成千上万)将被重写为新的。 它们中的一些可能被302'ed到新的URI模式,如:
RewriteRule ^/articles/articlename.html /new/article/taxonomy/and/such.html [R,L]
其他人,我们将要传递到CMS后端,以便最终用户看到相同的URL,虽然它是从内部的新path提供的,例如
RewriteRule ^/articles/article2.html /content/en/new/article/path/article2.html [PT,L]
我打算把它放在一对FAT DBM rewritemaps中,以便分别处理这两种types,但要比把它们放在那里作为数千个单独的重写规则更快。
我不清楚,如何调用这些,以便mod_rewrite只拾取任何与DBM文件中的键匹配的URL,然后用值replace它。
RewriteEngine on RewriteMap 302_rewrites dbm:/etc/httpd/conf/rewritemaps/dbmtest_302.dbm RewriteRule ^${302_rewrites:$1} ${302_rewrites:$2} [R,L]
以上不起作用。 但是我接近?
你不能在RewriteRule
的左边(匹配)使用你的RewriteMap
。 另外,由于在这一点上没有发生匹配,因此$1
没有任何东西。 您可以在RewriteRule
指定一个默认值,如下所示:
RewriteRule ^(/articles/.*) ${302_rewrites:$1|$1} [R,L]
这将查找数据库中的请求path( /articles/mumble/...
),如果没有find,它将返回原始path。 如果不是所有事情都以/articles
开头,那么显然你的比赛会更加普遍:
RewriteRule ^(/.*) ...