gpt4 book ai didi

php - htaccess 如何在 url 重写后访问/获取搜索参数

转载 作者:可可西里 更新时间:2023-10-31 22:53:03 25 4
gpt4 key购买 nike

我有一个 htaccess 重写规则,基于提交的表单。我正在尝试读取搜索参数,这是关键字搜索的一个简单示例,但理想情况下最终会添加更多参数:

单参数url://thesite.com/search?keyword=sample+text

2个参数url://thesite.com/search?keyword=sample+text&location=myCity

在我的 htacess 中,我有一个简单的重写规则来寻找这样的搜索:

RewriteRule ^.*search?(.*)$ /displayPage.php?page=search&options=$1

我像这样访问选项参数:

$searchOptions = filter_input(INPUT_GET, "options")!==NULL?filter_input(INPUT_GET, "options"):'';

当我输出这个变量时,它什么也没有。

我尝试了 var_dump($_GET) 结果是:

array (size=2)
'page' => string 'search' (length=6)
'options' => string '' (length=0)

用于生成 url 的 html:

<form class="start-search" action="/search" method="get">
<input id='keyword' name='keyword' class="search-str" type="text" value="" placeholder="Start Your Search">
<!-- Meant to hold value for category -->
<input class="search-cat" type="hidden" value="" placeholder="Start Your Search">

<button class="btn" type="submit">
<i class="fa fa-arrow-circle-o-right"></i>
</button>
</form>

我期望 $searchOptions 包含以下内容:

对于单个参数:keyword=sample+text

对于多个参数:keyword=sample+text&location=myCity

我可以根据 & 和 = 拆分字符串并用空格替换 +。

为什么不包含参数有任何想法吗?

非常感谢

更新:应用案例 1

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^search?(.*)/$ displayPage.php?page=search&%1

我的 apache 日志报告如下:

"GET /search?keyword=test+text HTTP/1.1" 404 286

什么地方不对?我尝试删除?根据重写规则,我将其替换为/作为提供的示例。我修改了 html 以在其后包含一个/。当我执行以下操作时,apache 日志中报告了以下内容:

"GET /search/?keyword=test+text HTTP/1.1" 301 329
"GET /search?keyword=test+text HTTP/1.1" 404 286

其他 HTACCESS 信息

我已经应用了以下内容

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

我有一堆其他的 RewriteRule 用于其他所有功能的 url。这是我的第一个查询字符串,这让我很困惑。

更新2

尝试 Steve E. [QSA]

RewriteRule ^.*search?(.*)/$ displayPage.php?page=search&%1 [QSA]

Apache 日志报告

 "GET /search?keyword=sample+search HTTP/1.1" 404 286

解决方案:正如 Steve E 提供的上面的一个修复,在调用 displayPage.php 之前忘记了/。它适用于单个和多个参数。 :)

RewriteRule ^.*search?(.*)/$ /displayPage.php?page=search&%1 [QSA]

最佳答案

在您的 RewriteRule 上使用 [QSA] 标志

RewriteRule ^search?(.*)/$ displayPage.php?page=search&%1 [QSA]

这是文档

Modifying the Query String By default, the query string is passed through unchanged. You can, however, create URLs in the substitution string containing a query string part. Simply use a question mark inside the substitution string to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine new and old query strings, use the [QSA] flag.

关于php - htaccess 如何在 url 重写后访问/获取搜索参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com