Это работает:
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>
Возможно ли это с 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]