【问题标题】:PHP - How to remove trailing variables from Form Submit?PHP - 如何从表单提交中删除尾随变量?
【发布时间】:2015-08-17 23:25:23
【问题描述】:

当我提交表单时,我会得到类似http://localhost/offstreams/search/?search=fuzz 的网址。我希望 URL 看起来像这样:http://localhost/offstreams/search/fuzz

这是我的 HTML 表单:

<form action="<?php echo BASE_URI . "search/"; ?>" method='get' class='searchbarForm'>
    <input type='text' name='search' id='searchbar' placeholder='Search...'/>
</form>

我的 PHP 代码:

if (isset($_GET['search'])) {
    echo $_GET['search'];   
}

我的 .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^search/(.*)$ ./offstreams/searchs/search.php?search=$1 [QSA]

事情是这样的: 当我转到http://localhost/offstreams/search/fuzz 时会打印结果 - 它工作得非常好,但我希望页面提交到该链接而不是顶部的丑陋 URL。 如何提交表单并让 $_GET['search'] 与 mod_rewrite 一起使用?

【问题讨论】:

  • 您必须使用 GET 还是可以使用 POST?
  • 您需要使用 javascript 并单击搜索/提交按钮,更改表单的操作属性以包含搜索框的值。可能我会将提交按钮更改为“按钮”按钮(因此它不会提交),然后在我的按钮中单击处理程序函数自己处理导航,如location.href=encodeURIComponent(value);
  • 大多数框架使用 Route 和 { Slug } 解决方案。您可能可以执行一些 hacky 函数来剥离和读取正常的 url
  • @bassxzero 使用 post 可以工作,但不会在 url 中显示,我不喜欢这样,因为如果用户点击新页面,我不希望搜索数据消失后退按钮或类似的东西。

标签: php .htaccess mod-rewrite


【解决方案1】:

这不是您要问的,但应该可以。

if (isset($_GET['search'])) {
    if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
       header('Location: http://'.$_SERVER['HTTP_HOST'].'/offstreams/search/'.urlencode($_GET['search']));
       exit();
    }
    echo $_GET['search'];   
}

这将在当前 url 中搜索 ?,然后将 url 格式化为您想要的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多