Правило htacess для динамического URL в методе GET

У меня есть запрос GET, так как

http://www.example.com/index.php?location=location&category=category&keyword=any+keyword

У меня есть преобразовал этот URL в

http://www.example.com/location/category/any+keyword

, но проблема в том, что мой URL постоянно меняется.

  • Если пользователь вводит только ключевое слово, тогда URL будет иметь вид http://www.example.com/any+keyword , и мне нужно будет искать только по названию и описанию.

  • Если пользователь вводит только категорию, URL-адрес будет иметь вид http://www.example.com/category , и мне нужно будет искать только в категории.

  • Если пользователь вводит местоположение и ключевое слово, URL будет иметь вид http://www.example.com/location/any+keyword , и мне нужно будет выполнить поиск только по местоположению, названию и описание и наоборот.

... любая помощь приветствуется.

0
задан 16 August 2018 в 16:37
2 ответа

Возможно, вы могли бы сделать что-то подобное, если бы в параметре ключевого слова действительно был знак "+". Всегда нужно иметь уникальные шаблоны:

RewriteRule    ^(.+\+.+)/?$              index.php?keyword=$1                           [NC,L]
RewriteRule    ^(.+)/?$                  index.php?category=$1                          [NC,L]
RewriteRule    ^(.+)/(.+\+.+)/?$         index.php?category=$1&keyword=$2               [NC,L]
RewriteRule    ^(.+)/(.+)/(.+\+.+)/?$    index.php?location=$1&category=$2&keyword=$3   [NC,L]

Если бы не было знака «+» каждый раз и это могла бы быть обычная строка, это было бы невозможно, потому что ключевое слово и категория будут иметь один и тот же шаблон регулярного выражения.

1
ответ дан 4 December 2019 в 15:52

Судя по всему, URL-адрес может состоять из любой комбинации «местоположение», «категория» и / или «любое + ключевое слово»? (Хотя в вашем примере явно не показано, что «категория» и «любое ключевое слово +» могут использоваться вместе? Это немного уменьшило бы двусмысленность .)

Если только не существует заметной разницы между " location "," category "(и" any + keyword ") значения или количество различных местоположений и категорий достаточно малы, чтобы вы могли их фактически перечислить (жестко запрограммировать) их в вашей директиве, тогда нет никакого способа справиться с этими различиями URL-адресов только в .htaccess . Они неоднозначны .

Если возможные значения «местоположения» и «категории» уникальны, то, возможно, вы могли бы переписать URL-адрес вашего внутреннего приложения, и ваше приложение выполнит необходимые поиски, чтобы определить, является ли это местоположение »,« категория »или нет (например,« ключевое слово »). Но это потенциально требует гораздо больше работы (работает как вычислительная мощность ) и не масштабируется, поэтому не рекомендуется.

Реально, учитывая ваш пример URL, единственные потенциально допустимые URL, которые могут быть получены отсюда будет:

  • http://www.example.com/location
  • http://www.example.com/location/category
  • http://www.example.com/location/ category / any + keyword

, но проблема в том, что мой URL-адрес постоянно меняется

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

0
ответ дан 4 December 2019 в 15:52

Теги

Похожие вопросы