Чистый и грязный URL

Я сделал htaccess для чистых URL-адресов, которые впоследствии обрабатываются PHP, однако для моего параметра поиска я хочу использовать youtube-подобный '?q=searchquery'.

RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.*)/$ index.php?d=$1 [L]

Это мой htaccess, и он работает для всех URL-адресов, но «http://www.website.com/search/?q=searchquery» не работает. Теперь я пробовал другие перезаписи, такие как эти

RewriteRule ^(.*)/\?(.*)/$ index.php?d=$1&$2

RewriteRule ^(.*)/\?q=(.*)/$ index.php?d=$1&q=$2

Они не работают.

Я также просмотрел весь URI с помощью флага [R], и все, начиная с вопросительного знака, не отображается.

RewriteRule ^(.*)/$ index.php?d=$1 [L]

Используя URL-адрес: http://www.website.com/search/?q=searchquery отображает: http://www.website.com/search/

Изменить: Итак, как мне сделать оба? \о/


person Tim S.    schedule 11.02.2011    source источник
comment
Что такое чистый URL и грязный URL?   -  person BoltClock    schedule 11.02.2011
comment
Чистый URL: website.com/product/product-name Грязный URL: website.com/products.php?p=product-name То же самое вещь   -  person Tim S.    schedule 11.02.2011
comment
Где-то есть вопрос?   -  person Greg Treleaven    schedule 11.02.2011


Ответы (1)


Просто используйте флаг QSA (дополнение строки запроса):

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

Если URL-адрес вызывается со строкой запроса, строка запроса добавляется к сгенерированному URL-адресу.

PS: Вы не можете сопоставить строку запроса в правиле перезаписи. Строка запроса удаляется до сопоставления правил.

person NikiC    schedule 11.02.2011
comment
@Tim: Если это тот ответ, который вы искали, нажмите на прозрачную зеленую галочку рядом с ним ;) - person NikiC; 11.02.2011
comment
Я пробовал это около миллиона раз, но мне говорят, что нужно подождать. Я определенно буду продолжать нажимать, пока это не сработает! Спасибо чувак - person Tim S.; 11.02.2011
comment
@Tim: Возможно, есть какой-то промежуток времени, в который вы не можете принять ответ. - person NikiC; 11.02.2011
comment
Да, я сделал это, создал аккаунт и дал вам большой палец вверх, хотя это стрелочка \o/ - person Tim S.; 11.02.2011