我怎样才能将此 URL 重写api.domain.com/v1/json/account?id=123
为api.domain.com?id=123&v=v1&f=json&t=account
RewriteCond %{HTTP_HOST} ^(api)\.[^\.]+\.[^\.]+$ [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/?(\?%{QUERY_STRING})?$ [NC]
RewriteRule ^(.*)$ /?%{QUERY_STRING}&v=%1&f=%2&t=%3 [L]
答案1
RewriteRule ^/([^/]+)/([^/]+)/([^/]+) /?v=$1&f=$2&t=$3 [QSA,R,L]
这样就行了 - 你非常接近了。欢迎你RewriteCond %{HTTP_HOST}
在上面添加一行(我还没有为你测试过)。
让查询字符串附加 (QSA) 标志为您完成艰苦的工作 :)。请参阅mod_rewrite 文档如果你好奇它的工作原理。
编辑:为了澄清起见,完成此操作所需的唯一一行是我发布的那行,它消除了您的第二个 RewriteCond 和 RewriteRule 并将其折叠为一个语句。您可以选择在其上方添加一个额外的 RewriteCond 来检查 %{HTTP_HOST} 的值。
答案2
RewriteCond %{HTTP_HOST} ^api\.[^\.]+\.[^\.]+$ [NC]
RewriteCond %{REQUEST_URI} /([^/]+)/([^/]+)/([^/]+) [NC]
RewriteRule ^(.*)$ /?%{QUERY_STRING}&v=%1&f=%2&t=%3 [L]