У меня есть запрос 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
и мне нужно только искать по местоположению, названию и описанию и наоборот.
... любая помощь будет оценена по достоинству.
Вы могли бы сделать что-то подобное, если бы в параметре ключевого слова действительно был знак "+". Всегда нужно иметь уникальные шаблоны:
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-адресов.