【问题标题】:Proper way to encode a (relative) URL using PHP使用 PHP 编码(相对)URL 的正确方法
【发布时间】:2011-09-08 19:06:48
【问题描述】:

我正在尝试使用 PHP 对以下相对 URL 进行编码:

/tracks/add/5449326

我尝试过使用 rawurlencode 和 urlencode。

这使它看起来像:%2Ftracks%2Fadd%2F5449326

我将在 AJAX 调用中使用此 URL。

我尝试调用的 URL 是:

/overlay/add-track/{param1}/{param2}

{param1} 只是一些 id

{param2} 是编码后的 url

但是,当我尝试拨打电话时,我收到了 404。

从外观上看,它正在尝试调用:

/overlay/add-track/1//tracks/add/5449326

所以看起来它正在尝试访问解码后的字符串。

任何想法如何解决这个问题?

PHP

$url = rawurlencode('/tracks/add/5449326');    
echo '<a href="/overlay/add-track/1/'.$url.'">Add</a>';

JS (jQuery) var href = $('a').attr('href');

$.ajax({
  url: href,
  type: 'POST',
  data: {},
  dataType: "json",
  success: function(data)
  {
    // do stuff
  }
});

编辑

  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} \.(eps|js|ico|gif|jpg|png|css|jpeg|doc|xls|doc|pdf|txt|ppt|zip)$
  RewriteRule ^(.*)$ $1 [L]

  RewriteCond "/path/public/%{REQUEST_URI}" !-f
  RewriteRule ^(.*)$ /index.php/$1 [L]

【问题讨论】:

  • 你不能只为 {param2} 使用 GET 变量吗?喜欢/overlay/add-track/{param1}?param2={param2}
  • 如果您在地址栏中输入/overlay/add-track/1/%2Ftracks%2Fadd%2F5449326 会发生什么?当然,前面有域的东西。
  • 应该可以,您的访问日志是否明确声明了错误的 url?
  • url参数的base64编码和解码呢?
  • @Znarkus:我得到一个 404。但是,如果我更改为将斜杠编码为另一个字符,例如和x 它有效。

标签: php javascript apache urlencode url-encoding


【解决方案1】:

网络服务器可能不允许编码的斜杠导致默认的 404。

对于 apache 参见:

http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes

要么需要更改 apache 配置,要么需要通过将斜杠/反斜杠替换为其他内容来解决它。

编辑: 您可以尝试使用双 urlencode,然后在 javascript 中 decodeURI()。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2014-05-28
    • 2013-10-10
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多