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

时间:2011-06-05 15:52:04

标签: php javascript apache urlencode url-encoding

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

/tracks/add/5449326

我尝试过使用rawurlencode和urlencode。

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

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

我尝试拨打的网址是:

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

{param1}只是一些id

{param2}是已编码的网址

然而,当我尝试拨打电话时,我得到了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]

1 个答案:

答案 0 :(得分:0)

网络服务器可能不允许使用编码的斜杠,从而产生默认的404.

对于apache,请参阅:

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

要么需要更改apache配置,要么通过用其他东西替换斜杠/反斜杠来解决它。

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