我成功地将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
。
有人可以帮帮我吗?
答案 0 :(得分:1)
mod_rewrite
一般来说不够灵活。当你有一个(也是唯一一个)要处理的查询参数时,它很好。当您添加更多内容时,您需要处理每个可能的查询参数组合,并为每个参数设置一个新规则。 mod_rewrite
仅适用于您无法再以旧样式提供网址的情况,例如,如果您要升级无法修改的第三方服务器,并希望让httpd
处理将旧的书签链接重定向到新的地点。
最好在PHP脚本本身内处理此问题。 #34; old" product.php?id=1234&name=test
网址应该会读取GET
参数并返回HTTP 301
响应("永久移动")到新的product/test/1234
网址。如果请求转到product.php
,product.php?name=test
,product.php?id=1234
或product.php?name=test&id=1234
,这将有效。该脚本确定如何处理缺失值,以及如何构建替换URL。
要使用单个查询参数进行重写,它看起来与成功重写规则相反,例如
RewriteCond %{QUERY_STRING} ^p=(.*)$
RewriteRule /product.php /product/%1 [R]