0

我有这个.htaccess:

RewriteRule ^(.+)\?([A-Za-z-]+)$ $1&msg=$2 [L,NC]
RewriteRule ^([A-Za-z-]+)$ /?goTo=$1 [L,NC]
RewriteRule ^account/([A-Za-z-]+)$ /?goTo=account&section=$1 [L,NC]
RewriteCond %{QUERY_STRING} (?:^|&)edit=([^&]*) [NC]
RewriteRule ^account/?$ /?goTo=account&act=edit_%1 [L,NC,QSA]
RewriteCond %{QUERY_STRING} (?:^|&)return=([^&]*) [NC]
RewriteRule ^access/?$ /?goTo=access&return=%1 [L,NC,QSA]

我遇到麻烦的部分是RewriteRule ^(.+)\?([A-Za-z-]+)$ $1&msg=$2 [L,NC]

基本上当我去的时候mysite.com/account/user它对应于mysite.com?goTo=account&section=user.
如果我去mysite.com/account/user?editSucc我需要得到mysite.com?goTo=account&section=user&msg=editSucc

我怎样才能做到这一点?谢谢。

4

1 回答 1

0

您只需要第二条规则中的 QSA 标志,根本不需要第一条规则:

RewriteRule ^account/([A-Za-z-]+)/?$ /?goTo=account&section=$1 [L,NC,QSA]

RewriteCond %{QUERY_STRING} (?:^|&)edit=([^&]*) [NC]
RewriteRule ^account/?$ /?goTo=account&act=edit_%1 [L,NC,QSA]

RewriteCond %{QUERY_STRING} (?:^|&)return=([^&]*) [NC]
RewriteRule ^access/?$ /?goTo=access&return=%1 [L,NC,QSA]
  • 请记住RewriteRule与 QUERY_STRING 不匹配
  • QSA 标志用于将现有查询字符串附加到新的查询参数中

参考:Apache mod_rewrite 简介

于 2013-11-04T13:52:12.247 回答