apache2 tomcat6 mod_rewrite с красивыми URL теряет информацию о сеансе пользователя - корзина пустых товаров - PullRequest
0 голосов
/ 05 августа 2011

Я пробовал это как с mod_jk, так и с mod_proxy и получал одинаковый результат.

Использование этого правила mod_rewrite прекрасно работает:

RewriteRule ^/(.*)\-blah.html$ /blah/blah/blah?blah=l2vb&party_name=$1 [R,L]

Проблема с этим - уродливый новый URL /blah/blah/blah?blah=l2vb&party_name отображается в адресной строке браузера, чего я и хотел избежать.Кажется, это флаг [R], который делает это.

Следующее правило скрывает уродливый URL и отображает только новый симпатичный:

RewriteRule ^/(.*)\-blah.html$ /blah/blah/blah?blah=l2vb&party_name=$1 [P,L]

Примечание: единственное отличие здесьФлаги в конце между [].

Беда в том, что если у пользователя уже есть что-то в корзине, он очищается.Каким-то образом их сеанс подключения (или что-то еще - скорее всего, из моей глубины здесь!) Переинициализируется, поэтому они, кажется, начинаются с нуля.

Я пробовал несколько других комбинаций флагов, таких как [PT,L], [R,PT] и т. Д. И до сих пор не повезло.

1 Ответ

0 голосов
/ 06 августа 2011

Флаг [R] означает 302 Redirect Code, который, очевидно, изменяет URL в браузере.

Я думаю, вам нужен QSA флаг:

RewriteRule ^/(.*)\-blah.html$ /blah/blah/blah?blah=l2vb&party_name=$1 [QSA,L]

QSA флагсохранит существующую строку запроса (точнее, добавит ее к новому URL) .. которая в противном случае теряется при манипулировании строкой запроса.Я думаю, что идентификатор сеанса или что-то может быть передано через строку запроса ... и когда URL перезаписывается, он теряется, поэтому сервер создает новый сеанс.Если это так, то вышеуказанное должно решить вашу проблему.

Документация Apache: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa

...