Назад | Перейти на главную страницу

правило htaccess для динамического 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-адрес постоянно меняется.

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

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

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]

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

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

Если нет заметной разницы между значениями "местоположение", "категория" (и "любое + ключевое слово") или количеством различных локации и категории достаточно малы, чтобы вы могли фактически перечислить (жестко закодировать) их в своей директиве, тогда нет способа справиться с этими различиями 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-адресов.