Почему я не могу использовать перенаправление URL с несколькими элементами GET? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь написать URL с несколькими параметрами get. Параметры в моем URL: 1) название категории 2) широта и 3) долгота. из которых широта и долгота необязательны.

Это мое перенаправление htaccess:

RewriteRule ^lists/([a-zA-z]+)/[^\d,.]/[^\d,.]/ lists.php?category=$1&latitude=$2&longitude=$3

This is my url to this page :
https://example.com/lists/cars/19.1905792/72.96778239999999

actual url : 
https://example.com/listAds.php?category=cars&lat=19.1905792&lng=72.96778239999999

Теперь вот проблема

1) Я получаю страницу с ошибкой 404 при использовании этой и другой проблемы

2) заключается в том, что, как я уже говорил, широта и долгота являются необязательными ... они дают мне ошибку, когда эти два значения не установлены.

Я уже делал то же самое на других страницах с одним GET-запросом и там прекрасно работает.

1 Ответ

0 голосов
/ 16 января 2019
  • Вы сделали так, чтобы оно совпадало со всеми , но числами (^ в начале списка символов \d)
  • Вы еще не сделали эти два числа необязательными. [^\d,.] означает, что требуется ровно один из этих символов. И поскольку он может соответствовать только одной из запятой или точке с цифрой, вы не можете делать десятичные дроби. Если вы хотите определить количество раз, вам нужно добавить . для одного или более, * для нуля или более или сделать диапазон {min,max} после [^\d,.].
  • Вы не захватываете два числа, даже если они совпадают - пропущено ().
  • Возможно, вы захотите сопоставить, только если указаны оба значения: долгота и широта, а не одно или другое - отсутствует группировка их обоих (но без захвата).

Попробуйте тестеры регулярных выражений, такие как https://regex101.com/r/PtwC0b/4 Хотя в Apache я не думаю, что вам нужно экранировать / с \, поэтому игнорируйте \/.

Конечный результат что-то как /lists/([a-zA-z]+)/(?:([\d.]+)/([\d.]+)/){0,1}

Группа (?: ... ){0,1} не захватывает, но гарантирует, что все в ней является одной группой - т.е. предоставляет только долготу и широту (и ровно ноль или один их набор). Для полного объяснения см. https://regex101.com/r/PtwC0b/4

explanation from regex101.com

Это не было проверено на Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...