$ _GET и перезапись URL для PHP

Мобильное приложение не может быть URL-адресом обратного вызова, поскольку оно не имеет статического адреса для обратного вызова сервера API. Например, ваш IP-адрес Android меняется, когда вы переходите с мобильной сети на домашний Wi-Fi или в кафе.

Вам нужен сервер между мобильным приложением и конечной точкой Auth, который может безопасно передавать токены входа в систему. Подобный поток можно найти с помощью службы, подобной Auth0

.

11
задан Martin Thoma 22 May 2015 в 16:37
поделиться

7 ответов

Да, это будет работать как ожидалось.

4
ответ дан 3 December 2019 в 01:45
поделиться

Я исправил бы ответ Grant на "Да, который будет работать главным образом как ожидалось".

А именно, mod_rewriteповедение относительно существующих строк запроса может быть удивительным. Как пример, давайте возьмем следующее правило, которое преобразовывает URL, который Вы предоставили:

RewriteRule /contact /index.php?p=contact

Это правильно перепишет /contact кому: /index.php?p=contact и название страницы будет доступно через $_GET['p']. Однако при использовании этой техники со сценарием, который использует параметры кроме названия страницы, это становится немного более хитрым. Это правило также переводит /contact?person=Joe кому: /index.php?p=contact. person=Joe параметр исчезает полностью! Существует два способа иметь дело с этим.

Самый простой путь состоит в том, чтобы использовать [QSA] ("строка запроса добавляет"), флаг на Вашем правиле, которое поместит строку исходного запроса после того, как параметры предоставили в правиле, переведя /contact?person=Joe кому: /index.php?p=contact&person=Joe:

RewriteRule /contact /index.php?p=contact [QSA]

Однако это позволяет Вашему p= параметр, который будет перезаписан. Посещение /contact?p=about будет переписан к /index.php?p=contact&p=about, так $_GET['p'] возвратится "о" в Вашем сценарии, не "связываются". Для разрешения этого используйте QUERY_STRING переменная вместо этого:

RewriteRule /contact /index.php?%{QUERY_STRING}&p=contact

Это гарантирует это $_GET['p'] будет всегда возвращать "контакт" при использовании этого правила, независимо от того, смешивают ли посетители с URL.:-)

33
ответ дан 3 December 2019 в 01:45
поделиться

При перезаписи URL это сделано mod_rewrite - страница, полученная в конце, является все еще "старой", т.е. index.php? p=contact. Другими словами, браузер получает контакт/. mod_rewrite затем переписывает его к index.php? p=contact. Сценарий, из-за этого, не знает, что любая перезапись произошла - это все еще называют ее "обычным" путем. Поэтому такой переписывать будет работать. Вы могли бы хотеть думать о нем как о прокси перезаписи, который запрашивает другую страницу, чем та инициирующий браузер, который требуют.

1
ответ дан 3 December 2019 в 01:45
поделиться

Разве это не случай, что изменение заголовков, представив части страницы причина, может завинтить взлеты на php страницах? Как Вы переписываете URL? Возможно, я неправильно понимаю...

0
ответ дан 3 December 2019 в 01:45
поделиться

Когда клиент запрашивает http://example.com/contact, сервер использует переписать правило служить им http://example.com/index.php?p=contact вместо этого. Клиент не сможет видеть переписанный URL и даже не мог бы смочь сказать, что он был переписан. При запросе любого URL, поскольку клиент дал бы Вам ту же самую страницу.

1
ответ дан 3 December 2019 в 01:45
поделиться

Вы переписываете URL от /contact кому: /index.php?p=contact, таким образом да, это будет работать как ожидалось.

0
ответ дан 3 December 2019 в 01:45
поделиться

В Вашем случае это не работало бы. mod_rewrite, после того, как это найдет соответствие и перепишет http://example.com/index.php?p=contact на http://example.com/contact, делает внутреннее перенаправление. Даже после того, как перенаправление, новый, перенаправленный URI, может все еще быть подобрано против условия и далее перенаправлено.

В любом случае поступление, которым URIs не сохранены в памяти, так даже Apache, может восстановить, каков исходный URI был. PHP, к тому времени, когда это выполняется, также не знает исходный URI. Следовательно, Вы освобождаете свой $ _GET Вар, поскольку переменные, отправленные через, ДОБИРАЮТСЯ, содержатся в URL, который был, к настоящему времени, преобразован, и PHP заполняет ассоциативный $ _GET массив путем парсинга входящих запросов.

Предложение поддержки обоих было бы кропотливо. Если у Вас есть http://domain.com/segment1/segment2/segment3, необходимо связать сегменты с чем-то значимым. Вы разделили бы свой домен и взорвались бы на '/', и в Вашем случае Вы могли сказать, что первый сегмент запрашивает страницу, и из http://example.com/contact/ можно извлечь страницу = 'контакт'

-2
ответ дан 3 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

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