应用 RewriteRule 之后,是否可以在 RewriteCond 中访问修改后的查询字符串?

应用 RewriteRule 之后,是否可以在 RewriteCond 中访问修改后的查询字符串?

是否可以在 RewriteCond 中访问修改后的查询字符串应用重写规则?

我正在尝试应用...

RewriteCond %{QUERY_STRING} ^(.*)&?id=([^&]+)&?(.*)$ [NC]
RewriteRule ^/app\.jsp$ /app/%2?%1%3 [R=302]

... 将以下 URL 重写为“良好”的 URL。这已经有效,但对于 (2) 和 (3),仍然有不必要的尾随“?”和“%”字符,我想删除它们:

/app.jsp?id=123&b=1 -> /app/123?b=1    (1)
/app.jsp?id=123     -> /app/123?       (2)
/app.jsp?b=1&id=123 -> /app/123?b=1&   (3)

我的想法是添加额外的条件重写规则来删除结尾的“?”和“%”字符修改的查询字符串,但我不知道如何在后续的 RewriteCond 中访问后者。感谢您的任何提示。

答案1

好的,我自己找到了一个简单的解决方案:

RewriteCond   %{QUERY_STRING}       ^()id=([^&]+)(.*)$  [NC,OR]
RewriteCond \?%{QUERY_STRING}  ^(\?.*)&id=([^&]+)(.*)$  [NC]
RewriteRule ^/app\.jsp$ /app/%2%1%3                     [R=302,QSD,L]

重写结果:

/app.jsp?id=123&b=1      -> /app/123?b=1       (1)
/app.jsp?id=123          -> /app/123           (2)
/app.jsp?b=1&id=123      -> /app/123?b=1       (3)
/app.jsp?b=1&id=123&d=2  -> /app/123?b=1&d=2   (4)

一些评论:

相关内容