Я пытаюсь создать дружественный URL через RewriteRule, но он продолжает игнорировать # как часть значения переменной. Строка на .htaccess так же проста, как эта
RewriteRule
#
RewriteRule ^key/(.+)/$ index.php?key=$1
и запрашиваемый URL-адрес
http://www.example.com/key/c%23/
но я получаю c как переменную get, а не c%23.
c
c%23
Что именно я делаю не так?
Наконец, после некоторых копаний, мне удалось это осуществить.
Ему просто нужен флаг B на RewriteRule для экранирования не алфавитно-цифровых символов, таких как #
B
RewriteRule ^key/(.+)/$ index.php?key=$1 [B]
%23 - хеш-знак (#). Я предполагаю, что браузер интерпретирует хеш как якорь и не передает его на сервер. Например, если вы используете http://www.foo.com/key/c%20/, вы получите "c [пробел]".
%23
http://www.foo.com/key/c%20/
%23 является хеш-символом (#), поэтому он (и все, что после него) фактически не анализируется mod_rewrite.Таким образом, фактический URL-адрес - http://www.foo.com/key/c, без %23.Другие штрих-коды работают нормально.
http://www.foo.com/key/c