【问题标题】:apache2 tomcat6 mod_rewrite with pretty urls loses user session info - empties shopping cart带有漂亮网址的 apache2 tomcat6 mod_rewrite 丢失用户会话信息 - 清空购物车
【发布时间】:2011-10-20 17:46:52
【问题描述】:

我用 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,只显示新的漂亮 URL:

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

注意:这里唯一的区别是 [] 之间的标志。

问题在于,如果用户的购物车中已经有东西,它就会被清空。不知何故,他们的连接会话(或任何它 - 在这里超出了我的深度!)被重新初始化,因此他们似乎是从头开始。

我尝试了其他几种标志组合,例如[PT,L]、[R,PT] 等,但到目前为止都没有运气。

【问题讨论】:

    标签: mod-rewrite apache2 tomcat6 mod-proxy mod-jk


    【解决方案1】:

    [R] 标志表示 302 重定向代码,这显然会更改浏览器中的 URL。

    我认为你需要QSA 标志:

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

    QSA 标志将保留现有的查询字符串(更准确地说,会将其附加到新的 URL).. 否则会在您使用查询字符串进行操作时丢失。我认为会话 ID 或其他内容可能会通过查询字符串传递......当 URL 被重写时,它会丢失,因此服务器会创建新会话。如果是这种情况,那么以上应该可以解决您的问题。

    Apache 文档:http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多