Назад | Перейти на главную страницу

Apache mod_rewrite удаляет вопросительный знак (?) И заменяет строку запроса

Я зарегистрировал RewriteRule с помощью mod_rewrite, но подставленный URL-адрес неверен.

Правило таковы:

RewriteRule ^/img/z(0|1)u(.+)\.(gif|jpg|jpeg|png)$ /image-servlet/img/?z=$1&url=$2 [NE,QSA,PT,T=image/$3]

Когда я получаю доступ к следующему URL:

http://localhost/img/z1uABC.jpg

Примененное правило перенаправляет на:

http://localhost/image-servlet/img/ABC

В конечном URL отсутствует подстановка строки запроса:

?z=$1&url=$2

И заменяются просто на:

$2

Кто-нибудь может помочь мне с моей ошибкой?

Спасибо,

И прошлое

Вы также можете установить RewriteLog и RewriteLogLevel и посмотрите, поможет ли это

Попробуйте удалить QSA из ваших флагов; в вашем примере вы не представлен с исходной строкой запроса - QSA и? при подстановке они будут объединены, что не соответствует вашему шаблону; это может быть то, что лажает. Использование NE также не гарантируется с учетом введенного вами шаблона, но это не должно вызывать проблем. Думаю, вам действительно нужно только [PT, T = image / $ 3].

Я знаю, что это уродливо и еще более неэффективно, но пробовали ли вы:

RewriteRule ^ / img / z (. +) U (. +) \. (. +) $ / Image-servlet / img /? Z = $ 1 & url = $ 2 [NE, QSA, PT, T = image / $ 3]

Я, кажется, помню, что mod_rewrite будет соответствовать только (. +) Или (. *) Переменной. Очевидно (из вашего примера), это единственное, что правильно переписывается.

Конечно, для соответствия этому правилу mod_rewrite потребуется вечность, и он требует, чтобы сценарий выполнял некоторую проверку ввода.

Кроме того, apache поддерживает команду TRACE http, которая удобна для отслеживания множественных (случайных) перезаписей. Просто замените GET в HTTP-запросе на TRACE, например:

TRACE /z1uABC.jpg HTTP / 1.1

Хост: foohost.com

Наконец, если вы все еще застряли, попробуйте запустить расширения Firefox LiveHeader или Firebug.

Вы можете показать нам содержимое переменной $ _GET через print_or или что-то в этом роде?

Можете ли вы также показать нам конфигурацию mod_jk из вашего httpd.conf? Я не понимаю, зачем вам нужна директива Alias.