У меня есть веб-приложение на основе PHP, к которому я пытаюсь применить mod_rewrite Apache.
Исходные URL имеют вид:
http://example.com/index.php?page=home&x=5
И я хотел бы преобразовать их в:
http://example.com/home?x=5
Обратите внимание, что при переписывании имени страницы я также эффективно "перемещаю" знак вопроса. Когда я пытаюсь это сделать, Apache с радостью выполняет этот перевод:
RewriteRule ^/([a-z]+)\?(.+)$ /index.php?page=$1&$2 [NC,L]
Но это портит переменные $_GET
в PHP. Например, вызов http://example.com/home?x=88
возвращает только одну переменную $_GET
(page => home
). Куда ушел x => 88
? Однако, когда я изменяю свое правило на использование амперсанда, а не вопросительного знака:
RewriteRule ^/([a-z]+)&(.+)$ /index.php?page=$1&$2 [NC,L]
вызов, подобный http://example.com/home&x=88
, будет работать так, как я ожидал (т.е. переменные page
и x
$ _GET установлены соответственно).
Разница минимальная, я знаю, но я бы хотел, чтобы мои переменные URL начинались с вопросительного знака, если это возможно. Я уверен, что это отражает мое собственное недопонимание того, как перенаправления mod_rewrite взаимодействуют с PHP, но, похоже, я должен быть в состоянии сделать это (так или иначе).
Заранее спасибо!
Cheers,
-Крис