2010-11-18 1 views
1

я использую APACHE: mod_rewrite, чтобы определить набор правил для переписано URLSApache: mod_rewrite: Spcaes и специальные символы в URL не работает

я хочу эту ссылку                                                                                                                      , который будет отображаться в качестве

/myDIR/walls.php?f=All&of=0&s=Newest ->All.html

так я использую следующее правило

текст из (.htaccess)

RewriteEngine on 
RewriteBase /myDIR/ 
RewriteRule ^All\.html$ papers.php?f=All&of=0&s=Newest 

теперь эти переменные, которые передаются как f=Allof=0s=Newest они используются в запросе, ОБЫЧНО, и одна из этих переменных, то есть f, поэтому metimes имеет значения с пробелами и специальными символами, и я не могу этого избежать, потому что база данных уже на месте, и все, что я делаю, переписываю URL.

теперь, когда я пытаюсь определить правила, как этот

я хочу эту ссылку                                                                                                                                                                                     отображаться как

/myDIR/walls.php?f=Characters & Supers&of=0&s=Newest ->Characters & Supers.html

что неправильно я знаю, потому что не должно быть никаких пробелов .. так, чтобы сделать это правильно я определить правила, как этот

RewriteRule ^Characters%20%26%20Supers\.html$ papers.php?f=Characters%20%26%20Supers&of=0&s=Newest 

это позволяет мне определить правила, но когда я нажимаю мою ссылку я получаю это 404 Not Found Error "Запрошенный URL/wallz/Персонажи & Supers.html не был найден на этом сервере."

ВОПРОС: ЧТО делать?

моя догадка я не должен делать HTML URL Encoding внутри .htaccess

+0

c'mon ребята, это 911 для меня .. мне нужно, чтобы это работало первым делом с утра – Moon

ответ

5

Ваше предположение верно. Когда URL-адрес достигнет mod_rewrite для обработки, Apache уже расшифровал URL-адрес для вас. Поэтому, если вы хотите проверить любые символы, закодированные иным образом, вам нужно использовать их литералы.

Поскольку пробельные используется в качестве разделителя здесь, вы также должны избежать ваших пространств:

RewriteRule ^Characters\ &\ Supers\.html$ papers.php?f=%0&of=0&s=Newest 

Я считаю, что использование кавычек будет также работать, так что следующий должен быть эквивалентен (хотя это непроверенный):

RewriteRule "^Characters & Supers\.html$" papers.php?f=%0&of=0&s=Newest 

Последнее замечание об обработке процесса Apache заключается в том, что он автоматически удалит несколько слэшей для вас. Хотя это не относится к вашему примеру, это еще один пример того, как URL-адрес преобразуется до достижения ваших правил mod_rewrite.