mod重写测试.php?p=一个测试/一个



我重写了像site.com/product/p1这样的规则,以成功site.com/product.php?p=p1

现在,我想相反,将从表单提交site.com/product.php?id=1234&name=test收到的查询转换为site.com/product/test/1234即我不希望网站访问者看到查询参数。

更清楚的是:在我的网站上,我有一个包含两个文本输入字段(以及一些隐藏字段(的表单;访问者可以输入产品ID和产品名称并提交表单。我希望生成的网址(在表单提交后(是平面的(site.com/product/test/1234(,并且不包含任何参数。

当然,我希望我的脚本(product.php(从表单中检索所有参数。我想我可以像把site.com/product/p1变成site.com/product.php?p=p1一样做到这一点。

谁能帮我?

mod_rewrite通常不够灵活,无法做到这一点。当您有一个(并且只有一个(查询参数要处理时,这很好。添加更多参数时,需要处理查询参数的每个可能组合,并为每个参数设置新规则。 仅当您无法再以旧样式提供 URL 时,mod_rewrite才适用,例如,如果您要升级无法修改的第三方服务器,并且希望httpd处理将旧书签链接重定向到新位置的情况。

最好在 PHP 脚本本身中处理这个问题。"旧"product.php?id=1234&name=testURL 处的脚本应读取GET参数,并向新的product/test/1234URL 返回HTTP 301响应("永久移动"(。如果请求转到product.phpproduct.php?name=testproduct.php?id=1234product.php?name=test&id=1234,这将起作用。该脚本确定如何处理缺失值,以及如何生成替换 URL。

要仅使用单个查询参数进行重写,它看起来像是成功重写规则的反面,例如

RewriteCond     %{QUERY_STRING}    ^p=(.*)$
RewriteRule     /product.php       /product/%1   [R]

最新更新