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