Кодирование специальных символов в переписывании URL с использованием htaccess - PullRequest
1 голос
/ 11 января 2012

У меня есть следующее правило перезаписи, оно работает:

RewriteRule area/(.*) listing.php?area=$1

Но когда я хочу использовать в нем %29, но когда я переписываю его следующим образом, я получаю ошибку 404:

RewriteRule area/something%29/(.*)/ listing.php?area=$1 

Экранирование %29 как \%29 также не работает.

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Apache% -декодирует URL-путь перед попыткой применения правил перезаписи. Поэтому вы не должны использовать% -encoding в вашем RewriteRule. Просто используйте нормального персонажа.

Так что в вашем случае вы должны просто использовать ). ), однако, является специальным символом в регулярном выражении, поэтому вы должны избегать его в RegEx путем добавления косой черты впереди. Так оно и станет \).

Ваше правило выше должно стать:

RewriteRule area/something\)/(.*)/ listing.php?area=$1 
0 голосов
/ 11 января 2012

URL, который вы хотите переписать, недействителен, так как% 29 будет разрешен только в строке запроса, но не в URL.Вы должны экранировать% как% 25 (а не с обратной косой чертой), поэтому полученное выражение будет ... что-то% 2529 - что должно сработать.

Для более подробной информации проверьте RFC2396.

...