我将我的网站迁移到了一个新平台&我想映射这样的旧网址:
anecdotage.com/index.php?aid=13337
对此:
anecdotage.com/articles/13336/
[注意ID中的一个偏移量
我可以在apache的mod_rewrite中执行此操作。任何帮助表示赞赏!
答案 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]
等