【发布时间】: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