Я боролся с этим уже два дня.
На данный момент у меня есть следующее правило переписывания:
RewriteRule ^(.*)$ index.php?u=$1 [NC,L]
Который переносит все, что находится за example.com/, в index.php как переменную GET u. Который обрабатывается в index.php с разнесением, чтобы определить различные аргументы: город (между первыми слешами) и местоположение (второй аргумент)
Это прекрасно работает для следующих URL:
example.com / City / location / или example.com/City/location
example.com/City/ или example.com/City
Который производит:
$arg[0] = city
$arg[1] = location
Проблема возникает, когда у местоположения есть Амперсанд в имени местоположения:
example.com/city/location&more
переводится как:
index.php?u=city/location&more
Проблема очевидна; я больше не могу использовать параметр explode в index.php, потому что вторая часть имени местоположения не хранится в $ _GET ['u'].
Как я могу решить эту проблему?
Я думаю о трех решениях, которые я не знаю, как реализовать:
1) переписать правило перезаписи для разделения города и местоположения в .htaccess
2) использование .htaccess эквивалента urlencode для преобразования знака & -sign в% 26
3) совершенно другое решение:)
Спасибо заранее!
Редактировать
Во-первых:
Когда ссылка создается на моем сайте, она переводится с помощью urlencode. Так что нет и не должно быть.
& Является частью бизнес-намен, как: "Рогалики и бобы"
Когда люди хотят найти эту компанию, они вводят: www.example.com/city/bagels&beans в поле URL.
И именно здесь начинается проблема.
редактировать 2
Когда я иду на: example.com/city/bagels%26Beans
это переводится следующим образом: $ _GET:
Array
(
[u] => city/Bagels
[Beans] =>
)
редактировать 3
То, как я взрываю $ _GET ['u'], чтобы сформировать аргументы.
$arg = explode('/',$_GET['u']);