我设置了一条规则来重写查询字符串。虽然重定向已正确执行,但 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 中遇到了同样的问题。我的解决方案是使用重写映射使用“unescape”内部函数。使用两次该函数可执行双重 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]