#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. Пожалуйста. Я немного доработал свой ответ и добавил некоторые пояснения. Проверьте это.