提交表单时重写URL

时间:2011-09-09 18:34:58

标签: php .htaccess redirect get form-submit

关于使用htaccess进行重定向的问题。在GET搜索表单提交中,我得到以下网址:

http://www.example.com/search/?criteria=foo&filter=all&date=all&submit=search&page=1

以上工作正常。然后我在我的htaccess中有了这个重写规则:

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/$ search.php?criteria=$2&filter=$3&date=$4&submit=$1&page=$5 [L]

以上也行得正常。它允许我对我的搜索结果使用以下结构:

http://www.example.com/search/foo/title/all/1/

现在我的问题是,当我点击提交时,我希望它使用新的clearner url结构,但是它使用带有问号和等号的杂乱的结构。现在自动我想也许我必须在PHP中进行重定向,但是如果我能用htaccess做的话我会更高兴,因为它意味着更清晰的代码。

我也理解我可以通过截取点击并创建seo友好网址来使用JavaScript来做到这一点但是再次如果他们是htaccess的方式我更喜欢。

希望你明白我想要实现的目标,非常感谢阅读,

fl3x7

p.s我对htaccess很新,所以如果你能解释/指导那些很棒

4 个答案:

答案 0 :(得分:7)

你无法单独使用.htaccess。

您可以使用javascript(拦截onclick事件,使用用户输入的数据构建url字符串,然后将页面重定向到此URL),但考虑到javascript在客户端运行,这不是真的可靠。

我的建议是使用PHP。过程是一样的,但我会使用POST而不是GET作为表单的方法。在呈现页面之前,检测$_POST数据并使用它构造$url。然后使用$url将页面重定向到header("Location: ".$url);,最好在此之后使用exit();,以确保下面的代码不会在重定向时执行。

答案 1 :(得分:0)

如果没有Javascript,你就无法做到这一点。

使用GET方法的HTML表单将在查询字符串中发送表单值 没有办法告诉它将值放在路径中。

答案 2 :(得分:0)

你可能使用Javascript执行此操作,但是可以通过使用重定向在htaccess中执行此操作。我认为它会是这样的:

RewriteRule ^search\.php?criteria=(.*)&date=(.*)&filter=(.*)&page=(.*)&submit=([^&])* /search/$1/$3/$2/$5/$4 [R=302, L]

我希望这会有效,因为查询字符串应该按字母顺序排列。

然而,一句警告:这可能不起作用,所以请把它作为一个尝试的建议。

答案 3 :(得分:0)

使用seo urls进行搜索绝对没有任何意义 谷歌家伙不太可能不如你聪明,但他们正在使用STANDARD查询字符串方式进行搜索。因为其他每一种搜索方式都很丑陋