apache - 查询字符串重写规则添加百分比符号

apache - 查询字符串重写规则添加百分比符号

我设置了一条规则来重写查询字符串。虽然重定向已正确执行,但 URL 重写的查询部分会附加一个 % 字符,如下所示:

index.php?option=com_finder&view=search&f=1&Itemid=365&q=the%2520emperor%2527s%2520new%2520school

代替

index.php?option=com_finder&view=search&f=1&Itemid=365&q=the%20emperor%27s%20new%20school

重写规则设置如下:

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/index.php?option=com_finder&view=search&f=1&Itemid=365&q=%1 [L,R=301]

我的目标是重写

site-search.html?searchword=someword

作为

全站搜索?q=someword

语法上有什么错误吗?

答案1

您已经非常接近正确的格式了。

尝试更改最后一行的最后一部分

来自 &q=%1 [L,R=301]

至 &q=$1 [L,R=301]

答案2

我在 Apache/2.2.15 中遇到了同样的问题。我的解决方案是使用重写映射使用“unes​​cape”内部函数。使用两次该函数可执行双重 URL 解码,从而解决该问题。

使用您的示例进行演示:

RewriteMap unesc int:unescape

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/index.php?option=com_finder&view=search&f=1&Itemid=365&q=${unesc:${unesc:%1}} [L,R=301]

相关内容