Страница перенаправления HTAccess с & знак - PullRequest
0 голосов
/ 18 июля 2010

Я пытаюсь сделать свои страницы более дружественными.

У меня есть ссылки на моей странице.

http://abc.com/test.php?Section=pages&title=feedback+%26+enquiry

все работает нормально, и заголовок имеет значение "обратная связь и запрос".Я изменил выше ссылку на:

http://abc.com/pages/feedback+%26+enquiry.htm

Я написал код htaccess как:

Options +FollowSymLinks

RewriteEngine on
RewriteRule index.htm$ index.php
RewriteRule ^(.*)/(.*)\.htm$ /test.php?Section=$1title=$2 [R]

Я ожидал тот же результат, но я был удивлен, увидев ошибку, так как заголовок имеетзначение или "feedbac" и новая переменная "query" создаются со значением ""

Я не могу найти ошибку.Я думаю, это ошибка преобразования htaccess.так, как я могу заставить это работать?

Я попытался backescaping, но получил внутреннюю ошибку сервера.Мой новый код htaccess:

Options +FollowSymLinks

RewriteEngine on
RewriteRule index.htm$ index.php
RewriteRule ^(.*)/(.*)\.htm$ index.php?Section=$1&title=$2 [R,B]

Моя версия Apache: 2.2.4

Ответы [ 2 ]

0 голосов
/ 18 июля 2010

из документа mod_rewrite :

Apache должен удалить URL-адреса перед их отображением, поэтому обратные ссылки ( $ 1 ) будут удалены в тот момент, когда ониприменяются.

, поэтому ваш feedback+%26+enquiry.htm переписывается в test.php?title=feedback+&+enquiry, что, естественно, дает результат, который вы видите.

вы можете избежать удаления обратных ссылок, добавив 'B' (экранирование обратных ссылок) переписать флаг в RewriteRule:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B]
0 голосов
/ 18 июля 2010

Если вы используете Apache 2.2, вы можете использовать флаг B, чтобы избежать любых обратных ссылок в переписанном URL:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B]

В противном случае в Apache 2.0 вы можете попробовать использовать внутренний1005 * escape:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=${escape:$1} [R]
...