Основная проблема перезаписи URL в PHP (mod_rewrite) - PullRequest
2 голосов
/ 11 ноября 2009

В моем .htaccess у меня есть следующее

RewriteEngine On

RewriteRule ^users/?$   users.php
RewriteRule ^users/([a-z]+)/?$   users.php?username=$1

Все работает как задумано, если я делаю

http://example.com/users/
http://example.com/users/joeschmoe/

и PHP будет читать "joeschmoe" как значение для

 $_GET['username']

Однако, если я сделаю

http://example.com/users/joeschmoe/?foo

PHP не подхватит

 $_GET['foo']

Есть идеи, почему это происходит и как я могу заставить это работать? Спасибо за ваше время!

Ответы [ 2 ]

6 голосов
/ 11 ноября 2009

Добавить [QSA] параметр в RewriteRule , который позволит apache добавлять строку запроса к перенаправленному URL:

RewriteRule ^users/?$   users.php [QSA]
RewriteRule ^users/([a-z]+)/?$   users.php?username=$1 [QSA]
4 голосов
/ 11 ноября 2009

Возможно, вы ищете опцию "QSA" для RewriteRule :

'qsappend|QSA' (добавление строки запроса)
Этот флаг заставляет переписать движок для добавления части строки запроса строки подстановки к существующая строка вместо замены Это. Используйте это, когда вы хотите добавить больше данные в строку запроса через переписать править.

На этой странице также указано:

Изменение строки запроса

По умолчанию строка запроса передается без изменений.
Вы можете, Тем не менее, создать URL-адреса в строка подстановки, содержащая запрос Струнная часть. Просто используйте вопрос пометить внутри строки подстановки указать, что следующий текст должен быть повторно введен в запрос строка.
Когда вы хотите стереть существующая строка запроса, конец строка подстановки только с вопросительный знак.
Комбинировать новые и старые строки запроса, используйте [QSA] флаг.


В вашем случае, что-то вроде этого должно сделать:

RewriteEngine On

RewriteRule ^users/?$   users.php
RewriteRule ^users/([a-z]+)/?$   users.php?username=$1 [QSA]
...