LINUX.ORG.RU

Странности mod_rewrite

 , , ,


0

2

Добрый день, товарищи.

Имеется django (mod_wsgi), апач и mod_rewrite. Для mod_rewrite в настройках вирутального хоста заданы, например, следующие правила:

        LogLevel alert rewrite:trace3
        RewriteEngine On
                                                                  
        RewriteRule ^/dummy$ /de/testcity?cityname=berlin [PT,L]
        RewriteRule ^/mnogomnogomnogobukov$  /de/testcity?cityname=berlin [PT,L]

Для первого правила все происходит нормально, http://host/dummy преобразуется в http://host/de/testcity?cityname=berlin

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

Для http://host/mnogomnogomnogobukov урл, который доходит до django (context['request'].get_full_path()) выглядит так: /mnogomno/de/testcity?cityname=berlin

Да, так происходит в случае, если target-url содержит знак вопроса (GET-параметры). Если знака вопроса нет, то все хорошо, мусора в начале строки нет.

Товарищи, куда копать? Просмотрел одним глазом багзиллу апача, вроде ничего похожего не увидел. На всякий случай обновил апач (бубунта 14.04) с 2.4.7 до 2.4.10 — ничего.

P.S. сразу уточню — без mod_rewrite в данной задаче не обойтись, все варианты решения с помощью самой django уже были тщательно изучены.

P.P.S. лезть в исходники апача не хочется, но вероятно придется :(

★★★★★

P.S. сразу уточню — без mod_rewrite в данной задаче не обойтись, все варианты решения с помощью самой django уже были тщательно изучены.

Обмануешь же. Можно поднять на Nginx+uwsgi. Если же апач однозначно нужен для других приложений - то можно (и даже нужно) перед апачем поставить nginx.

Siado ★★★★★
()
Ответ на: комментарий от Siado

Да, про nginx я думал, но забыл :)

Апач не принципиален, попробую nginx + ngx_http_rewrite_module. Спасибо!

unfo ★★★★★
() автор топика
Ответ на: комментарий от unfo

А вообще, если мне не изменяет память, в mod_rewrite для обработки всяких гетов в дополнение к RewriteRule используется директива RewriteCond. Только пример не могу никакой сейчас показать.

Siado ★★★★★
()
Ответ на: комментарий от Siado

У меня правила довольно простые, можно обойтись без RewriteCond.

unfo ★★★★★
() автор топика
18 февраля 2015 г.
Ответ на: комментарий от seth

Некропостить — нехорошо :)

unfo ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.