php - 使用 PHP 编码(相对)URL 的正确方法

标签 php javascript apache urlencode url-encoding

我正在尝试使用 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]

最佳答案

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

对于 apache,请参阅:

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

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

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

关于php - 使用 PHP 编码(相对)URL 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244000/

相关文章:

php - PCRE 正则表达式重叠匹配

php - Laravel:多对多,如何插入数据?

php - 读取下一条记录

javascript - 修改字典数组,在每个字典中添加一个元素

apache - LimitRequestFieldSize 在 Apache 2.4 中不起作用

apache - 为什么我的 Ubuntu Web 服务器在/etc/ssl/certs 中有这么多 SSL 证书?

php - 根据 x 个权重选择 x 个随机行

javascript - Google 自定义搜索热门查询出现错误

javascript - 不确定为什么表单没有加载到已加载的 html 标签上?

linux - 不允许 Amazon EC2 Apache 符号链接(symbolic link)