【问题标题】:& symbol encoded to %2526 in url& 符号在 url 中编码为 %2526
【发布时间】:2010-09-03 21:31:02
【问题描述】:

我需要在我的 url 中替换 & 符号的编码值,以便搜索查询成功。我正在努力从post 的解决方案中复制类似的方法来获取如下查询字符串。

lovelakedistrict.com/result/?q=Brookfield+Bed+%2526+Breakfast

我希望它是这样的

lovelakedistrict.com/result/?q=Brookfield+Bed+&+早餐

原因是带有 %2526 的 url 在 google 中被编入索引并且显然被破坏了。

【问题讨论】:

标签: apache url .htaccess encoding rewrite


【解决方案1】:

正如aularon所说,它应该是Bed+%26+Breakfast,因为&是一个查询字符串参数分隔符。 (如果您点击第二个链接,您会发现实际上正在搜索“Brookfield Bed”。)

<form id="form" action="/result" method="get">

产生正确的查询,例如:

http://www.lovelakedistrict.com/result?q=Brookfield+Bed+%26+Breakfast

但是,由于/result 是一个文件夹,Web 服务器将该查询重定向到/result/,并且出于某种原因同时更改了查询字符串,将其双重编码为​​%2526

我不知道为什么会这样,这不是正常的 Apache 行为——你可能有一些狡猾的重写规则吗?——但你应该能够通过将表单指向正确的 URL 来避免它:

<form id="form" action="/result/" method="get">

【讨论】:

    【解决方案2】:
    RewriteCond %{QUERY_STRING} (.*?)%(25)+26(.*?%(25)+26.*)
    RewriteRule ^ %{REQUEST_URI}?%1+%3 [N]
    RewriteCond %{QUERY_STRING} (.*?)%(25)+26(.*)
    RewriteRule ^ %{REQUEST_URI}?%1+%3 [L,R=301]
    

    (复制自您发布的将20s 更改为26s 的链接)

    【讨论】:

    • 我试过这个,但它导致连续 3 个加号,但我认为将所有 & 更改为“和”更传统。因此,该链接现在指向 lovelakedistrict.com/result/?q=Brookfield+Bed+and+Breakfast。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2011-05-22
    • 1970-01-01
    • 2012-07-24
    • 2012-04-07
    • 2017-07-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多