2015-02-11 1 views
0

Я пытаюсь передать обратную косую черту как часть аргумента строки запроса.Необходимо пропустить обратную косую черту в строке запроса с хорошими URL-адресами

Проект использует довольно простой метод: url_rewriting

//.Htaccess 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule .* index.php?arguments=$0 [NC,L] 

Затем получают $_GET['arguments'] со значениями, разделенными /

Ex .: блог/запись/2/заполнит $_GET['arguments'] с: 'post/2 /'

Проблема в том, что я пытаюсь чтобы передать что-то вроде тест% 5Cabc (URL, закодированного для теста \ а), то запрос возвращает ошибку 404 вместо не передавая ее в качестве аргумента

Я понятие не имею, как это исправить. Заранее спасибо.

ответ

1

Причины вы получаете ошибку 404, потому что по умолчанию Apache имеет AllowEncodedSlashes выключена, и его поведение является 404 любым запросом, содержащим обратная косая черта. Это связано с тем, что он включен в potential security hazard. В Apache 2.2.18 и более поздних версиях есть параметр NoDecode, который делает это более безопасным и хорошо работает для вашего дела.

Во всяком случае я попытался включить его локально, а на самом деле этот скрипт:

<?php var_dump($_REQUEST); ?> 

способен обрабатывать URLs как

http://localhost/this\is\a\test 

и выходы

array(1) { ["arguments"]=> string(14) "this\is\a\test" } 

Тем не менее, (или мой браузер), похоже, имеют проблемы с закодированными обратными косыми чертами, превращая их в обычные обратные косые черты - возможно, t не проблема. Если вы включите флаг B в своем rewriterule, он преобразует незакодированные обратные слэши в кодированные обратные косые черты.

+0

Нашли некоторую информацию здесь http://httpd.apache.org/docs/2.2/rewrite/flags.html – CarlosCarucce

+0

Спасибо за подсказку. – CarlosCarucce

0

Я надеюсь, что у меня есть ты прав, попробуйте использовать это:

'/file.php?id=$value'//this utilise that backslash and then pass the id to the `$_Get[]` Function somewhere in the file.php. 
+0

Спасибо за ваш ответ. Я уже работал, проблема в том, что я пытаюсь передать строку, подобную этой: «test \\ abc». Использование urlencode уже. – CarlosCarucce