0

我用 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]但到目前为止都没有运气。

4

1 回答 1

0

[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

于 2011-08-05T20:45:55.143 回答