2013-07-02 2 views
1

Я смотрю по всему Интернету, но я просто не могу найти решение.mod_rewrite Как сохранить строку запроса?

Я пытался передать строку запроса как другое значение $ _GET в php. Например, localhost/find/book переводит на index.php?url=find/book, но этого недостаточно для моей цели. Когда я пытаюсь сделать что-то вроде localhost/find/book?cols=name,library, я хочу, чтобы это перевести на index.php?url=find/book?cols=name,library, но вместо этого он переводится в index.php?url=find/book, он просто пропускает вторую строку запроса.

Я уверен, что сделал это пару месяцев назад, и это сработало. Но теперь это просто не так, и я не знаю, почему.

Вот мои правила перезаписи:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

Спасибо заранее.

+0

Вместо этого вы также можете использовать 'RewriteRule^(. *) $ Index.php [L, QSA]' и получить URL-адрес через '$ _SERVER ['REQUEST_URI']' в вашем index.php. Тогда нет необходимости в URL-адресе. – Malte

+0

Подход @jeroen был именно тем, что я искал. Ваш ответ дает исходный URI. В моем случае мне не нужен дополнительный знак вопроса, я собирался взорвать последнюю часть QS на вопросительном знаке в любом случае, а затем еще раз взорвать запятую. Но спасибо! – gblblgl

ответ

1

Опция QSA, которую вы уже используете, делает именно это.

Однако, нет такого понятия, как второй строки запроса, так что вы URL-адрес не будет переводить:

index.php?url=find/book?cols=name,library 

, но вместо того, чтобы что-то вроде:

index.php?url=find/book&cols=name,library 
        ^here 

Обратите внимание, что вы должны позаботьтесь о том, чтобы вы выводили правильные строки запроса (используя, например, urlencode в php), так как в противном случае ваше приложение может не вести себя так, как вы думаете. Ваша запятая, например, должна кодироваться как %2C, но вы должны позволить, чтобы urlencode позаботился об этом.

+1

Думаю, я искал не в том направлении. Спасибо @jeroen! – gblblgl

+1

Правильно, возможность недействительных строк является хорошей точкой. Наверное, я бы не подумал об этом, пока не столкнулся с проблемой :) – gblblgl

Смежные вопросы