2012-01-11 3 views
1

У меня есть правила перезаписи, как следующее, он работает:Кодирование специальных символов в URL переписывания с использованием Htaccess

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

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

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

Спасаясь %29 как \%29 также не работает.

ответ

0

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

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

+0

Спасибо за ваш ответ, но проблема не решена% 29 было только для example.I хотите кодировать Hebrew символы в этом way.Can вы сказать, почему, как. используйте закодированный символ% .htaccess для перезаписи URL. – sunil

+0

Я не совсем понимаю, что именно вы пытаетесь сделать. Тем не менее, вы можете попытаться избежать обратных ссылок с помощью флага [B] (при условии, что вы используете Apache> = 2.2, я полагаю), или поиграть с флагом noescape [NE]. Более подробную информацию можно найти здесь: http://httpd.apache.org/docs/trunk/rewrite/flags.html. – Olaf

2

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

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

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

RewriteRule area/something\)/(.*)/ listing.php?area=$1 
+2

Специальный символ также может быть записан в обозначении \ x29. – Gerben

 Смежные вопросы

  • Нет связанных вопросов^_^