将 url /v1/json/acount 重写为 ?v=v1&f=json&t=account

将 url /v1/json/acount 重写为 ?v=v1&f=json&t=account

我怎样才能将此 URL 重写api.domain.com/v1/json/account?id=123api.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]

相关内容