Apache: mod_rewrite: Spcaes и специальные символы в URL не работают - PullRequest
1 голос
/ 18 ноября 2010

Я использую APACHE: mod_rewrite, чтобы определить набор правил для перезаписи 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=All of=0 s=Newest они используются в запросе, ЯВНО и одной из этих переменных, то есть f иногда имеет значения с пробелами и специальными символами, и я не могу избежать этого, потому что база данных уже находится в и все, что я делаю, переписываю 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 Ошибка не найдена "Запрошенный URL / wallz / Characters & Supers.html не найден на этом сервере."

ВОПРОС: ЧТО ДЕЛАТЬ?

я предполагаю, что я не должен делать HTML URL-кодирование внутри .htaccess

1 Ответ

5 голосов
/ 20 ноября 2010

Ваше предположение верно.К тому времени, когда 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.

...