php - 提交表单时重写 url

标签 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/

现在我的问题是,当我单击提交时,我希望它使用新的更清晰的 url 结构,但是它使用带有问号和等号的更困惑的结构。现在我自动在想也许我必须在 PHP 中做一个重定向,但是如果我可以用 htaccess 做,我会更开心,因为这意味着代码更简洁。

我也知道我可以通过拦截点击并创建对 seo 友好的 url 来使用 JavaScript 来做到这一点,但如果他们是使用 htaccess 的方式,我更愿意这样做。

希望您了解我想要实现的目标,非常感谢您的阅读,

fl3x7

p.s 我对 htaccess 很陌生,所以如果你能解释/指导等,那就太好了

最佳答案

您不能仅使用 .htaccess 来做到这一点。

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

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

关于php - 提交表单时重写 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365999/

相关文章:

php - 用于生产的 LAMP 堆栈?使用 PHP 5.4.x、Apache 2.4.x、MySQL 5.5.x

php - 每分钟运行一次 PHP 脚本

apache - RewriteRule 适用于 .htaccess 但不适用于 httpd.conf

c# - 如何从 JavaScript 方法重定向到操作?

asp.net - Response.Redirect 和线程被中止错误?

php - Auth::attempt($credentials) 总是返回 false

php - 无法让登录页面重定向到安全页面

reactjs - 如何在子目录中为React App配置我的.htaccess文件?

.htaccess 重定向重写规则

Apache 重定向到一个干净的 URL