переписать URL при отправке формы - PullRequest
1 голос
/ 09 сентября 2011

Вопрос по перенаправлению с использованием htaccess. В форме поиска GET я получаю следующий URL:

http://www.example.com/search/?criteria=foo&filter=all&date=all&submit=search&page=1

Выше работает нормально. Тогда у меня есть это правило перезаписи в моем htaccess:

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/$ search.php?criteria=$2&filter=$3&date=$4&submit=$1&page=$5 [L]

Выше также отлично работает. Это позволяет мне использовать следующую структуру для моих результатов поиска:

http://www.example.com/search/foo/title/all/1/

Теперь мой вопрос: когда я нажимаю «Отправить», я бы хотел, чтобы он использовал новую структуру URL ясности, однако она использует более сложную структуру со знаками вопроса и знаками равенства. Теперь я автоматически подумал, может быть, мне нужно сделать редирект в PHP, однако, если я смогу сделать это с помощью htaccess, я был бы счастлив, так как это означает более чистый код.

Я также понимаю, что могу сделать это с помощью JavaScript, перехватывая щелчок мышью и создавая дружественный для SEO URL, но, опять же, если они подходят для htaccess, я бы предпочел это.

Надеюсь, вы понимаете, чего я пытаюсь достичь, и большое спасибо за чтение,

fl3x7

ps, я довольно новичок в htaccess, так что, если вы можете объяснить / руководство и т. Д., Это было бы здорово

Ответы [ 4 ]

7 голосов
/ 09 сентября 2011

Вы не можете сделать это исключительно с помощью .htaccess.

Вы можете сделать это с помощью javascript (перехватить событие onclick, создать строку URL-адреса, используя введенные пользователем данные, а затем перенаправить страницу на этот URL-адрес), но это не совсем надежно, учитывая, что javascript работает на стороне клиента.

Я предлагаю использовать PHP для этого. Процесс такой же, но я буду использовать POST вместо GET в качестве метода для формы. Прежде чем страница будет обработана, определите данные $_POST и создайте $url, используя их. Затем перенаправьте страницу на этот $url, используя header("Location: ".$url);. После этого будет лучше использовать exit();, чтобы убедиться, что приведенный ниже код не будет выполнен при перенаправлении.

0 голосов
/ 09 сентября 2011

Нет ничего прекрасного в использовании SEO-URL для поиска.
Маловероятно, что ребята из Google менее умны, чем вы, но они используют СТАНДАРТНЫЙ способ запроса строки поиска. Потому что любой другой способ поиска уродлив

0 голосов
/ 09 сентября 2011

Вы, вероятно, должны сделать это с Javascript, однако вы можете сделать это в htaccess, используя перенаправления.Я думаю, что это будет что-то вроде:

RewriteRule ^search\.php?criteria=(.*)&date=(.*)&filter=(.*)&page=(.*)&submit=([^&])* /search/$1/$3/$2/$5/$4 [R=302, L]

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

Однако, предупреждающее слово:Это может не сработать, поэтому, пожалуйста, воспринимайте это как предложение.

0 голосов
/ 09 сентября 2011

Вы не можете сделать это без Javascript.

HTML-форма, использующая метод GET, отправит значения формы в строке запроса.
Невозможно сказать, что вместо этого нужно поместить значения в путь.

...