【发布时间】:2019-05-26 23:07:51
【问题描述】:
我正在处理搜索显示,但 htaccess 出现了一些问题,无法按我想要的方式工作。我对同一个 url 进行了多次重写,我认为这就是原因。但我不确定..
更新:根据我的测试结果,所有 Rewrite url 都有效。但是表单强制页面转到search.php?search=test,而不是我想要的search/test。
所以真正的问题是:
如何让表单 action="" 提交给 search/test/ 而不是 search.php?search=test
我得到了什么:
search.php?page=1
search.php?type=DEFINED_TYPE&search=test
search.php?type=DEFINED_TYPE&search=test&page=1
我想要什么:
search/1
search/DEFINED_TYPE/test
search/DEFINED_TYPE/test/1
表格:
<form action="" method="get" id="searchForm">
<label for="DEFINED_TYPE_radio">
<input type="radio" name="type" id="DEFINED_TYPE_radio" value="DEFINED_TYPE"<?php if($_GET['type'] == 'DEFINED_TYPE') echo ' checked' ?> />
<em<?php if($_GET['type'] == 'DEFINED_TYPE') echo ' class="selected"' ?>><i class="fas fa-tags"></i>Type</em>
</label>
<div class="input">
<input type="text" placeholder="Search here..." value="<?php echo isset($_GET['search']) ? htmlspecialchars($_GET['search']) : '' ?>" name="search" id="searchField" autocomplete="off" autofocus>
<i class="fa fa-search submit" id="submit"></i>
</div>
</form>
Htaccess:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule ^search$ search.php [NC]
RewriteRule ^search/([^/]+)$ search.php?page=$1 [NC]
RewriteRule ^search/([^/]+)/([^/]+)$ search.php?type=$1&search=$2 [E=ORIG_URI:/$1]
RewriteRule ^search/([^/]+)/([^/]+)/([^/]+)?$ search.php?type=$1&search=$2&page=$3 [E=ORIG_URI:/$1]
谁能发现我做错了什么?
【问题讨论】:
-
你的问题到底是什么?
-
@starkeen 在提交表单时查看“想要什么”与“我得到什么”。
-
您想在浏览器中输入
search.php?page=1并查看/search/1吗? -
@starkeen 当我提交表单时,它会转到 search.php/page=1 而不是 search/1,因为我告诉 htaccess 这样做。
-
@starkeen - 当用户键入路径时,这与路由和 .htaccess 文件中的设置有关,您知道该主题以及如何设置它吗?跨度>