У нас есть правило htaccess, подобное этому:
RewriteRule ^(.*)/(.*)/(.*) ../app$1/scripts/api/index.php?fn=$2&$3 [L]
В большинстве случаев это работает нормально, однако Apache декодирует URL-адрес до того, как он достигнет этого правила, поэтому URL, такой как beta/list/&cat=red%20%26%20blue
, виденhtaccess как beta/list/&cat=red & blue
, поэтому мы получаем cat='red'
и blue=null
, входящие в index.php
вместо cat='red & blue'
.
Я читал, что обходной путь для этой проблемы заключается в использовании серверных переменных, таких как %{REQUEST_URI}
%{THE_REQUEST}
в правиле htaccess, поскольку они не декодируются перед использованием, но их трудно реализовать.Знак вопроса в RewriteRule сводит все с ума, и я не могу понять, как избежать этого.
Могут ли какие-либо эксперты помочь мне исправить приведенное ниже правило, чтобы оно велось так же, как и выше?
RewriteCond %{REQUEST_URI} ^(.*)/(.*)/(.*)
RewriteRule . ../app%1/scripts/api/index.php?fn=%2&%3 [L]