SimBioT19
@SimBioT19
{{ user.about }}

Проблема с третьим параметром ЧПУ, почему не считывает $_GET?

Проблема заключается в следующем: не считывает $_GET['next'] причём вообще непонятно почему. Поначалу вроде бы всё работало, но затем опять сломалось. $_GET['next'] - это третий параметр, остальные два работают как надо, а вот этот, сопротивляется...
.htaccess имеет следующий вид:
RewriteRule ^([-a-zA-Z0-9_]+)/([0-9]+)/([0-9]+)/$ page.php?main=$1&sub=$2&next=$3 [QSA,L]

Уже всё перепробовал и поменял, сайтов штук эдак 30 просмотрел, а вот ответа всё нет. С чего бы это вдруг?
Проблема только третьей переменной не ограничивается:
RewriteRule ^([-a-zA-Z0-9_]+)/([0-9]+)/([0-9]+)/([0-9]+)/$ page.php?main=$1&sub=$2&next=$3&last=$4 [QSA,L]

$_GET['last'] также не будет передаваться
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
wladyspb
@wladyspb
Программист
А вам обязательно принимать это в виде get переменных? Самый простой способ работы с ЧПУ - создайте функцию или класс который будет разбирать REQUEST_URI и отдавать переменные.
Что-то в стиле:

function getUriParam($parameterNumber) {
    $arrayParameters = explode('/', $_SERVER['REQUEST_URI']);
    return $arrayParameters[$parameterNumber];
}


Можно усложнить, можно сделать именованные пары параметров, но самая простая реализация такая. Потом просто запрашиваете нужный элемент(нулевой будет пустым, поскольку первый символ в request_uri - слэш, и первый элемент массива - всё что до слэша - пустой) например, в строке www.site.ru/pig/dog/cat - getUriParam(2) вернёт 'dog'.

И не нужно лезть в htaccess - это всё же внешний элемент, зависящий от сервера а не от php, поэтому если можно избежать этой зависимости - лучше так и поступить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@raincons
строке www.site.com/media/1/2 регулярка ^([-a-zA-Z0-9_]+)/([0-9]+)/([0-9]+)/$ не соответствует, вы же требуете слеш на конце. запрос должен быть www.site.com/media/1/2/
Ответ написан
paveluho
@paveluho
RewriteRule ^([-a-zA-Z0-9_]+)/([0-9]+)/([0-9]+)/([0-9]+)/$ page.php?main=$1⊂=$2&next=$3&last=$4 [QSA,L]

данная проблема похожа на то, что перед правилом есть еще похожее правило, которое заносит в себя часть запроса с флагом L

наглядно приведу пример:
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ /?do=open&s=$1&y=$2&x=$3&p=$4 [L] # это то самое правило что Вы написали
RewriteRule ^(.*)/(.*)/(.*)/$ /?do=open&s=$1&y=$2&p=$3 [L] # это то правило которое раньше "срабатывает", оно должно стоять после

местами поменяйте и посмотрите какие в ЧПУ могут быть схожие URL

может не прав в данной ситуации не видя htaccess целиком
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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