2

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

我可以在 apache 的 mod_rewrite 中做到这一点吗?任何帮助表示赞赏!

4

1 回答 1

0

您不能单独使用 mod_rewrite 进行任何数学运算,这意味着您可以匹配13337并对其进行某些操作以将其更改为,13336而无需使用某种RewriteMap从外部将数字减 1,但这需要访问服务器或虚拟主机配置。

因此,在 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]

等等

于 2012-09-12T19:34:59.620 回答