【问题标题】:HTTP Bad Request error because of a character由于字符导致的 HTTP 错误请求错误
【发布时间】:2016-11-09 14:31:13
【问题描述】:

我正在使用 .htaccess 转换具有以下参数的链接...:

www.domain.com/offer.php?id=1000&title=所有衬衫都有 20% 的折扣

www.domain.com/offer/1000/所有衬衫都有 20% 的折扣

现在,当我尝试打开链接时,会显示服务器端错误:

错误请求 您的浏览器发送了此服务器无法理解的请求。

在我的代码中,title 值不起任何作用,但出于 SEO 的原因我需要它。因此,当我从链接中删除“%”字符时,页面将毫无问题地打开。

那么我该如何解决这个问题,以便尽管 HTTP 请求中有百分比字符,但我的链接仍会打开?

【问题讨论】:

  • 如果我们能看到.htaccess rewrite rule可能会很好

标签: php apache http


【解决方案1】:

正如Nordenheim 所述,问题在于您的标题属性中使用了特殊字符。

使用 PHP,您可能希望在发送链接的 title 属性上使用 urlencode()

所以:

<?php

$title = "All shirts are with a discount of 20%";
$link = urlencode($title);

?>
<a href='http://www.domain.com/offer.php?id=1000&title=<?php print $link;?>'>Click here</a>

这会将All shirts are with a discount of 20% 转换为URL 安全字符串All+shirts+are+with+a+discount+of+20%25,并将解决您从.htaccess mod_rewrite 收到的错误。

【讨论】:

  • 在哪里可以看到禁用字符的列表?因为它们中的很多实际上都可以很好地处理 HTTP 请求?
  • @FrankHelligberger 是的,here
【解决方案2】:

百分号 (%) 用于对 url 字符串中的特殊字符进行编码。因此,它具有特殊含义,必须作为编码字符传递,即%25

由于您传递了一个特殊字符的指示而不发送任何其他内容,因此您会收到错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多