我有一个网址,例如:http://testsite.local/search/?q=findme,一旦有人进行查询,我的搜索页面就会显示。我使用mod_rewrite来重写一些页面,并想知道是否有可能将它变成一个很好的URL:http://testsite.local/search/1/findme/(数字1是结果集的页面)。
由于
答案 0 :(得分:2)
这应该可以解决问题:
RewriteEngine on
RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search/?page=$1&q=$2 [L]
Here是一个包含少量信息的网页,Google对此也非常了解。
如果您想更改订单,可以交换$1
和$2
。
修改:如果您的HTML中包含以下内容:
<form id="search_form" method="get" action="search">
<input type="text" name="q" />
<input type="submit" value="Search" />
</form>
使用jQuery,您可以执行以下操作:
$(document).ready(function() {
$("#search_form").submit(function(event) {
event.preventDefault();
window.location = "/search/1/" + escape($(this).find("input[name=q]").val())
});
});
这将拦截表单提交并执行自定义网址,如果用户没有javascript,它仍然会以旧方式工作。
答案 1 :(得分:2)
好的,这些方法都不是我想要的,经过一些研究后我决定在页面有查询字符串时重定向到正确的页面。所以在进行搜索时,我只是这样做了:
if ($_GET["posted"] == "true") {<br />
header("Location: /search/" . $_GET["q"] . "/1/");<br />
}
我知道该页面刚刚从表单发布,因为它有隐藏的“已发布”字段。
答案 2 :(得分:1)
<?php
$url = 'http://testsite.local/search/?q=findme';
$parsed = parse_url($url);
var_dump($parsed);
parse_str($parsed['query'], $params);
var_dump($params);
输出:
array
'scheme' => string 'http' (length=4)
'host' => string 'testsite.local' (length=14)
'path' => string '/search/' (length=8)
'query' => string 'q=findme' (length=8)
array
'q' => string 'findme' (length=6)
答案 3 :(得分:1)
使用.htaccess
文件:
RewriteEngine On
RewriteBase /search/
#rewriting only if the request file doesn't exists (you don't want to rewrite request for images or other existing files)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)? index.php?path=$1 [L]
之后,您可以在根index.php文件中使用REQUEST_URI,并可以解析其中的字符串:
var_dump($_SERVER['REQUEST_URI']);
或者您可以使用$_GET['path']
: