mod_rewrite并保留查询字符串

时间:2017-11-28 10:51:40

标签: php apache .htaccess mod-rewrite

我想做一个mod_rewrite网址转换。我想直接

http://localhost/events?user=XXX&start=YYY&total=ZZZ

http://localhost/?operation=events&user=XXX&start=YYY&total=ZZZ

我目前在.htaccess中使用的是:

RewriteRule
    ^events\?userid=([0-9]+)&start=([0-9]+)&total=([0-9]+)$
    ?operation=events&user=$1&start=$2&total=$3
    [L]

但它似乎没有起作用。

我也尝试了一个更简单的版本:

RewriteRule ^events\?([a-zA-Z0-9&=]+)$ ?operation=events&$1 [L]

但它也无效。

¿我怎样才能将查询参数逐个“转移”,否则将整个查询字符串转移到有向路径的末尾?

1 个答案:

答案 0 :(得分:2)

  

我如何"转移"要么查询一个一个,要么整个查询字符串到有向路径的末尾?

这是使用QSA标志完成的。 QSA(查询字符串追加)标志在添加新查询参数时保留现有查询参数。

但请记住,您无法使用RewriteRule指令匹配查询字符串。您只能使用RewriteRule匹配请求URI。

您可以使用此规则:

RewriteEngine On

RewriteRule ^/?events/?$ ?operation=userevents [L,NC,QSA]

这会将http://localhost/events URI路由到http://localhost/?operation=userevents 将所有原始查询参数附加到重写的URI。例如:http://localhost/userevents?user=XXX&start=YYY&total=ZZZ将被重写为http://localhost/?operation=events&user=XXX&start=YYY&total=ZZZ