使用mod_rewrite映射URL

时间:2012-09-12 19:24:21

标签: regex apache

我将我的网站迁移到了一个新平台&我想映射这样的旧网址:
anecdotage.com/index.php?aid=13337
对此:
anecdotage.com/articles/13336/
[注意ID中的一个偏移量

我可以在apache的mod_rewrite中执行此操作。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

你不能单独使用mod_rewrite进行任何数学计算,这意味着你可以匹配13337并对其做些什么来将其更改为13336而不使用某种类型的`RewriteMap从外部减去1的数字,但这需要访问服务器或vhost配置。

因此,在vhost / server配置中,您必须设置地图:

RewriteMap subtract prg:/path/to/script/that/subtracts-by-one.sh

这个subtracts-by-one.sh脚本将一个数字作为输入,从中减去1,然后输出结果。然后在重写规则中使用它:

# to make sure we aren't clobbering legit requests
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} aid=([0-9]+)
RewriteRule ^/?index.php$ /articles/${subtract:%1}/? [L]

如果您无权访问重写地图,那么您需要以艰难的方式完成并枚举所有重写:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} aid=12345
RewriteRule ^/?index.php$ /articles/12344/? [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} aid=13337
RewriteRule ^/?index.php$ /articles/13336/? [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} aid=19911
RewriteRule ^/?index.php$ /articles/19910/? [L]