Удалить ?из строки запроса в форме сообщения - PullRequest
2 голосов
/ 27 ноября 2010

У меня в настоящее время есть URL-адрес: http://testsite.local/search/?q=findme для моей страницы поиска, когда кто-то делает запрос.Я использую mod_rewrite, чтобы переписать некоторые страницы, и мне было интересно, можно ли превратить это в красивый URL-адрес, например: http://testsite.local/search/1/findme/ (номер 1 - страница набора результатов).

Спасибо

Ответы [ 4 ]

2 голосов
/ 27 ноября 2010

Хорошо, ни один из этих методов не был тем, что я искал, после небольшого исследования я просто решил перенаправить на правильную страницу, когда страница содержит строку запроса. Поэтому, когда был произведен поиск, я просто сделал это:

if ($_GET["posted"] == "true") {<br />
    header("Location: /search/" . $_GET["q"] . "/1/");<br />
}

Я знаю, что страница была только что опубликована из формы, поскольку в ней есть скрытое поле "отправлено".

2 голосов
/ 27 ноября 2010

Это должно сработать:

RewriteEngine on
RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search/?page=$1&q=$2 [L]

Здесь - страница с небольшой информацией, Google тоже много знает об этом.

Вы можете поменять местами $1 и $2, если хотите изменить порядок.

edit : Если у вас есть что-то подобное в вашем 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())
  });
});

Это будет перехватывать отправку формы и выполнять пользовательский URL, а если у пользователя нет JavaScript, он все равно будет работать по-старому.

1 голос
/ 27 ноября 2010

Использовать .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]

После этого вы можете использовать REQUEST_URI в своем корневом файле index.php и анализировать в нем строку:

var_dump($_SERVER['REQUEST_URI']);

или вы можете использовать $_GET['path']:

1 голос
/ 27 ноября 2010

Использование parse_url () и parse_str () .

<?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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...