Mod_rewrite“.html?variable =”无法正常工作

时间:2015-02-02 21:16:09

标签: php apache .htaccess mod-rewrite

我有一个网站,我成功使用以下网址重写:

RewriteRule ^(.*)_r-(.*)/calculator.html$ /calcadd.php?rest_id=$1 [L]

随着我的网站不断发展,我认为能够将一些额外的参数传递给此页面会很有帮助。所以我尝试更新url以在.html之后包含一个变量。这是我试过的:

    RewriteRule ^(.*)_r-(.*)/calculator.html?ids=(.*)$ /calcadd.php?rest_id=$1&ids=$3 [L]

这不起作用,我找不到页面错误。并且万一它不清楚,这不是mod_rewrite没有启用或任何问题。我所有的其他重写工作都很好,因此启用了mod_rewrite,允许覆盖为ALL等等。

谢谢!

3 个答案:

答案 0 :(得分:2)

这里只需要一个QSA标记,以便在添加新查询参数时保留原始查询:

RewriteRule ^(.*)_r-(.*)/calculator\.html$ /calcadd.php?rest_id=$1 [L,NC,QSA]

另请注意,您无法匹配RewriteRule中的查询字符串。

答案 1 :(得分:0)

默认情况下,RewriteRule仅考虑请求的网址而不使用查询字符串。您需要RewriteCond来实现您想要的目标:

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*)_r-(.*)/calculator.html$ /calcadd.php?rest_id=$1&%1 [L]

未经测试。

使用%1%2等,您可以在RewriteCond的{​​{1}}语句中注入与对应的括号模式匹配的模式。

答案 2 :(得分:0)

保持原样并使用它。 QSA标志表示查询字符串追加。它将自动将查询sting添加到重写结束。

RewriteRule ^(.*)_r-(.*)/calculator.html$ /calcadd.php?rest_id=$1 [QSA,L]
相关问题