.htaccess не может перехватить параметр GET

#php #.htaccess #get

#php #.htaccess #получить

Вопрос:

.htaccess

 RewriteRule ^apply/import?$ index.php?action=import [NC]
RewriteRule ^apply/import/([0-9a-zA-Z] )/?$ index.php?action=importamp;code=$1 [NC]
  

Я запускаю следующие URL-адреса и print_r($ _GET)

 "localhost/apply/import" //Prints Array ( [action] => import ) as expected

"localhost/apply/import?code=abc123" // Prints Array ( [action] => import ) only, and is missing code.
  

Как мне перехватить код переменной get?

Комментарии:

1. у вас есть косая черта после импорта во второй строке вашего htaccess..

2. @scrowler удалил косую черту и даже попытался заменить ее вопросительным знаком?. В любом случае он по-прежнему завершается с ошибкой. Первое правило htaccess по-прежнему выполняется первым.

Ответ №1:

При "localhost/apply/import?code=abc123" этом первое правило соответствует (вы можете проверить это, удалив второй код перезаписи)
Если вы хотите запустить второе правило перезаписи, вы должны попробовать что-то вроде localhost/apply/import/abc123 , и это будет результатом:

Массив ( [действие] => импорт [код] => abc123)

ОБНОВЛЕНИЕ: я думаю, это может решить вашу проблему:
вы можете использовать [QSA] для получения дополнительных параметров строки запроса в своем первом правиле перезаписи:

 RewriteRule ^apply/import?$ index.php?action=import [QSA]
  

Затем going to localhost/apply/import?code=abc123 выведет это:
Массив ( [действие] => импорт [код] => abc123)

Вы можете прочитать больше о флагах RewiteRule . Вот объяснение:

Когда URI для замены содержит строку запроса, поведение RewriteRule по умолчанию заключается в отбрасывании существующей строки запроса и замене ее вновь созданной. Использование флага [QSA] приводит к объединению строк запроса.

Комментарии:

1. Точно, он даже не достигает второго правила. Я не могу контролировать URL-адрес с параметром кода. Пока моя единственная работа — отказаться от правил htaccess для этого конкретного сценария, но это не идеально.

2. Во втором правиле вы, очевидно, заявляете, что ищете какой-то шаблон, подобный этому: localhost/apply/import/somecode поэтому вы не можете ожидать, что что-то другое, кроме этого, соответствует. Тем не менее, я думаю, что я узнал, что вы хотите, и я обновил свой ответ.

3. Я видел это решение ранее, но не было ясно, как его реализовать. Спасибо. 1

4. Пожалуйста. Я немного доработал свой ответ и добавил некоторые пояснения. Проверьте это.