Очистить URL-адреса поискового запроса?

Это работает:

HTML

<a href="/search/querystring">query</a> 

Htaccess

 RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L] 

Прохождение формы поиска:

 <form method="get" action="/search"> <input type="search" name="q" value="querystring" /> <input type="submit" /> </form> 
  • Результат: http://example.com/search?q=querystring
  • Желаемый результат: http://example.com/search/querystring

Возможно ли это с htaccess или мне нужно перенаправить с PHP из search.php?

Пример желаемого результата в действии: http://twitter.com/search/hello

РЕДАКТИРОВАТЬ

Я предпочитаю, чтобы это не зависело от JavaScript, поэтому поисковые системы и люди с отключенным JavaScript тоже увидят это.

Я думаю, проблема заключается в том, что вы создали HTML-форму с методом GET, которая автоматически открывает URL-адрес, который вы указали в качестве результата. Если вы хотите отправить свой поисковый запрос, как тот, который вам нужен, вы должны взломать форму с помощью JavaScript, чтобы назвать ваш красивый URL-адрес следующим образом:

 <form method="get" action="/search/" onsubmit="return false;"> <input type="search" name="q" value="querystring" /> <input type="submit" onclick="window.location.href=this.form.action + this.form.q.value;" /> </form> 

См. Трюк на этой странице. Хитрость заключается в том, чтобы отправить форму самостоятельно (или, я думаю, вы можете перенаправить на промежуточную страницу) и использовать логику на стороне сервера для перенаправления с использованием чистого URL-адреса.

Я думаю, вам действительно нужно создать отдельное правило перезаписи, которое по сути является вашим правилом перезаписи выше, но наоборот. Затем поместите его над своим первым правилом перезаписи.

 RewriteRule ^/search?q=([-0-9a-z]+)$ /search/$1 [NC] RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L] 

Кажется, довольно гетто для меня. Возможно, вам нужно удалить кнопку отправки из своей формы и перенаправить с помощью javascript.

Для всех, кто пытается решить эту проблему только с mod_rewrite (без JavaScript), см. Этот вопрос: Перенаправление и переписывание с помощью mod_rewrite

ПРИМЕР БЕЗ JAVASCRIPT

Установите вместо параметра поиска «searchredirect.php» и введите имя «q».

Создайте новый php-файл с именем searchredirect.php и получите только следующий код:

 <?php if (isset($_GET['q'])){ $url = $_GET['q']; header("location: search/".$url); } else { header("location: search"); } ?> 

Назовите исходную страницу поиска 'searchclean.php'

В вашем файле .htaccess есть следующее правило перезаписи:

 RewriteRule ^search/([^/]*)$ /searchclean.php?q=$1 [L] 

Я просто держал

RewriteRule ^search/([^/\.]+)/?$ search.php?q=$1 [L]

в моем .htaccess, я сделал search_redirect.php с кодом, приведенным ниже:

 <?php if (isset($_GET['q'])){ $url = $_GET['q']; header("location: search/".$url); } else { header("location: search"); } ?> 

Затем, конечно, я перенаправил свои формы на goo search_redirect.php и вуаля. Эта комбинация работала как шарм, тогда, поскольку у меня есть разбиение на страницы, мне не нужно было ничего делать, поскольку все они используют GET в строке запроса, а затем $ i для целого числа.

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