Правильный способ кодирования (относительного) URL с использованием PHP - PullRequest
4 голосов
/ 05 июня 2011

Я пытаюсь закодировать следующий относительный URL-адрес с помощью PHP:

/tracks/add/5449326

Я пытался использовать rawurlencode и urlencode.

Что и выглядело примерно так: %2Ftracks%2Fadd%2F5449326

Я собираюсь использовать этот URL в вызове AJAX.

URL, на который я пытаюсь позвонить:

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

{param1}просто какой-то идентификатор

{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]

1 Ответ

0 голосов
/ 05 июня 2011

Кодированная косая черта, вероятно, не разрешена веб-сервером, что приводит к значению по умолчанию 404.

Для Apache см .:

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

Либо необходимо изменить конфигурацию apache, либо вам нужно обойти ее, заменив косую черту / обратную косую черту чем-то другим.

редактирование: Вы можете попробовать двойной код urlencode, а затем декодировать URI () в JavaScript.

...