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

Я пытаюсь передать обратную косую черту как часть аргумента строки запроса.

В проекте используется довольно простой 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 вместо передачи его в качестве аргумента

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

0

Решение

Причиной ошибки 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 в своем перезаписывающем файле, он будет преобразовывать некодированные обратные слэши в закодированные обратные слэши.

1

Другие решения

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

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

По вопросам рекламы [email protected]