将表单数据发送到脚本时更改PHP获取请求的URL

时间:2013-04-17 05:29:27

标签: php .htaccess

现在,在表单提交时,URL看起来像:

(其中'query'是提交的数据)

http://mySite.com/index.php?search=query

http://mySite.com/?search=query

我怎样才能成功

http://mySite.com/search?q=query

如果可以在不编辑.htaccess文件的情况下执行此操作,请告诉我如何操作。

或者如果有必要编辑.htaccess,请告诉我要添加的规则,以便所有查询在提交时都有该表单中的网址。

2 个答案:

答案 0 :(得分:1)

我建议从 index.php 重定向,而不是在这种情况下使用重写规则。 重写规则也有成本,并且将在每次页面加载时检查它们

index.php 的开头:

<?php
if(!empty($_GET["search"]))
{
    header("Location: search?q=".rawurlencode($_GET["search"]));
    exit;
}
?>

正如 Olaf Dietsche 在评论中正确指出的那样,mod_rewrite优于PHP,所以问题实际上是index.php与其他文件的命中率是什么。如果它很低,那么php方法肯定会更好,但是,如果index.php达到50%左右的时间,那么你可能会更好地重写。

因此,添加mod_rewrite解决方案:

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)search=([^&]+)
RewriteRule ^index.php$ /search?q=%1 [R,L]

RewriteCond实际上查找search=查询字符串参数并确保它不为空 规则只是将index.php中的任何内容重写为/search?q=<query> 请注意,%1用于匹配从条件匹配的第一个捕获的子模式(而不是匹配规则本身的匹配部分 - 在这种情况下,我们需要使用$1)。


然而,真正的问题是我们为什么要首先处理这个问题。 如果通过在页面中提交值来完成搜索,那么它就是表单提交,因此它可以直接指向处理程序,之后不会重定向到处理程序。这样效率更高。

<form action="/search" method="get">
<input type="text" name="q">
...

这样,从搜索表单提交的任何内容都将直接转到/search,无需重定向即可处理。

答案 1 :(得分:1)

添加mod_rewrite解决方案。您必须检查index.phpsearch=查询字符串

RewriteCond %{QUERY_STRING} search=(.*)
RewriteRule ^index\.php$ /search?q=%1 [R,L]