У меня возникли трудности с mod_rewrite
, когда URL
является частью строки запроса.mod_rewrite с URL-адресом в строке запроса
Мое текущее правило перезапись:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?action=$1 [L]
</IfModule>
будет переписан http://example.com/Controller/action&url=example.com
к http://example.com/index.php?action=Controller/action&url=example.com
, который работает, как ожидалось, с $_GET
существа:
Array
(
[action] => Controller/action
[url] => example.com
)
Однако я желаю $_GET['url']
включить http://
и строка запроса, например, http://example.com/?a=1&b=2
, так что $_GET
будет:
Array
(
[action] => Controller/action
[url] => http://example.com/?a=1&b=2
)
я впервые попробовал кодирующий (строку запроса) URL
с rawurlencode
:
http://example.com/Controller/action&url=http%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2
Это, однако, дает Apache
ошибку:
Not Found
The requested URL /Controller/action&url= http://example.com/?a=1&b=2 was not found on this server.
Мое первое предположение состоит в том, что закодированные /
с нарушают пишут правило, и поэтому я удалил их, исправив ошибку. Это, однако, вызывает две проблемы. Главное в том, что нет больше никаких /
с в строке запроса (так что URL
является http:example.com?a=1&b=2
), а во-вторых, что &
ы проходят лечение в буквальном смысле, давая $_GET
значение:
Array
(
[action] => Controller/action
[url] => http:example.com?a=1
[b] => 2
)
Если кто-нибудь знает, как обойти эти проблемы, я был бы очень благодарен.
Разъяснение
Следует отметить, что это должно работать независимо от того, что используется конкретная строка запроса, например, $_GET
может быть:
Array
(
[action] => A/b/c/d
[href] => https://test.com/Test/test?test=test
[rhyme] => Jack & Jill
)
Единственный постоянный является то, что она начинается с /
отделенной списка слов (например, /Controller/action/param1/param2/param3...
). Необязательная строка запроса может быть любой, например. &user_id=1&api_key=1234&optional_option_1=a&optional_option_2=b&url=...
.
Так себе доступ третьих сторон, где они доступ к нашему сайту через URL (например, http://example.com/Dashboard/view с пользовательскими параметрами по их выбору (так что, если они используют &name=Michael&age=25&uihfwiu=alrjnwvur
он покажет:
name: Michael
age: 25
uihfwiu: alrjnwvur
В настоящее время единственные проблемы когда значения содержат /
с или &
с - это прекрасно работает, как-то, когда они не присутствуют
Простейшим будет использовать то, что работал до и предварять 'HTTP: //' просто с PHP '$ URL =«HTTP : // '. $ _GET ['url']; 'Я бы не стал слишком сильно переписывать, особенно не URL-адрес в URL-адресе, .. Начало URL-адреса. 'http: // example.com/Controller/action & url = example.com' как нет'? 'перед первым параметром anyways – DanFromGermany