Mod_rewrite 与“.html?variable=”不工作

Mod_rewrite with ".html?variable=" not working

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

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

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

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

这不起作用,我收到“找不到页面”错误。以防万一不清楚,这不是 mod_rewrite 未启用或任何问题。我所有其他的重写工作都很好,所以 mod_rewrite 被启用,允许覆盖是 ALL,等等

谢谢!

你只需要一个 QSA 标志来在添加新查询参数的同时保留原始查询:

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

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

默认情况下,RewriteRule 只考虑请求的 url 而没有查询字符串。你需要一个 RewriteCond 来实现你想要的:

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

未经测试。

使用 %1%2 等,您可以在 RewriteRule.[=17 中的 RewriteCond 语句中注入相应括号中匹配的模式=]

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

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