htaccess:首先重写“&”用“?”不管用

时间:2017-07-01 18:22:58

标签: apache .htaccess mod-rewrite

RewriteRule ^add_link/(.*)$                 ./add_link.php?$1
RewriteRule ^add_link/(.*)?(.*)$            ./add_link.php?$1&$2

当网址为/add_link/123123?link_id=1时,我无法获取“link_id”,我只能在使用/add_link/123123&link_id=1时获取该网址。为什么呢?

1 个答案:

答案 0 :(得分:0)

因为查询字符串(问号?之后的部分)在单独的QUERY_STRING变量中匹配。您还可以使用[QSA]标志追加查询字符串。所以你只需要这样做:

RewriteRule ^add_link/(.*)$ /add_link.php?$1 [QSA]

如果您确实想要匹配并捕获查询字符串,则可以执行以下操作:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ...

%1替换中使用RewriteRuleRewriteCond获取捕获。但是,如果您只想要整个查询字符串,那么您不需要这样做,因为您可以在替换中使用%{QUERY_STRING}。但是[QSA]只会在您的替换中指定一个时附加到查询字符串,因此在这种情况下应该符合您的需要,如上所示。

/add_link/123123&link_id=1适合您,因为它没有查询字符串?&只是该情况下网址的一部分。