Я пытаюсь передать обратную косую черту как часть аргумента строки запроса.
В проекте используется довольно простой url_rewriting
метод:
//.Htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?arguments=$0 [NC,L]
Тогда получите $_GET['arguments']
со значениями, разделенными /
Напр .: блог / пост / 2 / заполню $_GET['arguments']
с: ‘Пост / 2 /’
Проблема в том, когда я пытаюсь передать что-то вроде Тест% 5Cabc (URL, закодированный для Тест \ а), запрос возвращает ошибку 404 вместо передачи его в качестве аргумента
Я понятия не имею, как это исправить. Заранее спасибо.
Причиной ошибки 404 является то, что по умолчанию Apache имеет AllowEncodedSlashes выключен, и его поведение 404 для любого запроса, содержащего обратную косую черту. Это потому, что его включение является потенциальная угроза безопасности. В Apache 2.2.18 и более поздних версиях есть настройка NoDecode, которая делает это немного более безопасным и хорошо работает в вашем случае.
Во всяком случае, я попытался включить его локально, и действительно этот скрипт:
<?php var_dump($_REQUEST); ?>
умеет обрабатывать URL как
http://localhost/this\is\a\test
и выводы
array(1) { ["arguments"]=> string(14) "this\is\a\test" }
Тем не менее, он (или мой браузер), похоже, имеет проблемы с закодированными обратными слешами, преобразовывая их в обычные обратные слеши — возможно, это не проблема. Если вы включите флаг B в своем перезаписывающем файле, он будет преобразовывать некодированные обратные слэши в закодированные обратные слэши.
Надеюсь, я вас правильно понял, попробуйте использовать это:
'/file.php?id=$value'//this utilise that backslash and then pass the id to the `$_Get[]` Function somewhere in the file.php.