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

时间:2017-08-15 14:46:50

标签: forms .htaccess mod-rewrite

我成功地将site.com/product/p1等规则重写为site.com/product.php?p=p1

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

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

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

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

mod_rewrite一般来说不够灵活。当你有一个(也是唯一一个)要处理的查询参数时,它很好。当您添加更多内容时,您需要处理每个可能的查询参数组合,并为每个参数设置一个新规则。 mod_rewrite仅适用于您无法再以旧样式提供网址的情况,例如,如果您要升级无法修改的第三方服务器,并希望让httpd处理将旧的书签链接重定向到新的地点。

最好在PHP脚本本身内处理此问题。 #34; old" product.php?id=1234&name=test网址应该会读取GET参数并返回HTTP 301响应("永久移动")到新的product/test/1234网址。如果请求转到product.phpproduct.php?name=testproduct.php?id=1234product.php?name=test&id=1234,这将有效。该脚本确定如何处理缺失值,以及如何构建替换URL。

要使用单个查询参数进行重写,它看起来与成功重写规则相反,例如

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